用于多线程的 junit class 和 mockito
junit for multi threaded class with mockito
请帮我使用 Mockito 为这段代码编写一个 JUnit 测试。
class A{
private BlockingQueue<Runnable> jobQueue;
public void methodA(List<String> messages) {
try {
jobQueue.put(() -> methodB(message));
} catch(InterruptedException e) {}
}
private void methodB(Message message) {
//other logic
}
}
您的示例缺乏有关 methodB 正在做什么的上下文...不知道您要验证的功能是什么,仅验证 methodB 被调用不会是一个特别有用的测试,模拟也不是阻塞队列。我要冒险并假设 methodB 与另一个对象交互,而您真正想要验证的正是这种交互,如果是这种情况,我的代码和测试将类似于:
class A {
private BlockingQueue<Runnable> jobQueue;
private B b;
public void methodA(Message message) {
try {
jobQueue.put(() -> methodB(message));
} catch (InterruptedException e) {
}
}
private void methodB(Message message) {
b.sendMethod(message);
}
}
class B {
public void sendMethod(Message message) {
// other logic
}
}
我的测试可能类似于:
class Atest {
private A testSubject;
@Mock
private B b;
@Test
public void testASendsMessage() {
Message message = new Message("HELLO WORLD");
testSubject.methodA(message);
verify(b, timeout(100)).sendMethod(message);
}
@Before
public void setup() throws Exception {
testSubject = new A();
}
}
一般来说,您希望避免在单元测试中使用多个线程验证位,保存多个 运行 线程的测试主要用于集成测试,但在需要的地方查看 Mockito.timeout( ), 请参阅上面的示例了解如何使用。希望这有帮助吗?
请帮我使用 Mockito 为这段代码编写一个 JUnit 测试。
class A{
private BlockingQueue<Runnable> jobQueue;
public void methodA(List<String> messages) {
try {
jobQueue.put(() -> methodB(message));
} catch(InterruptedException e) {}
}
private void methodB(Message message) {
//other logic
}
}
您的示例缺乏有关 methodB 正在做什么的上下文...不知道您要验证的功能是什么,仅验证 methodB 被调用不会是一个特别有用的测试,模拟也不是阻塞队列。我要冒险并假设 methodB 与另一个对象交互,而您真正想要验证的正是这种交互,如果是这种情况,我的代码和测试将类似于:
class A {
private BlockingQueue<Runnable> jobQueue;
private B b;
public void methodA(Message message) {
try {
jobQueue.put(() -> methodB(message));
} catch (InterruptedException e) {
}
}
private void methodB(Message message) {
b.sendMethod(message);
}
}
class B {
public void sendMethod(Message message) {
// other logic
}
}
我的测试可能类似于:
class Atest {
private A testSubject;
@Mock
private B b;
@Test
public void testASendsMessage() {
Message message = new Message("HELLO WORLD");
testSubject.methodA(message);
verify(b, timeout(100)).sendMethod(message);
}
@Before
public void setup() throws Exception {
testSubject = new A();
}
}
一般来说,您希望避免在单元测试中使用多个线程验证位,保存多个 运行 线程的测试主要用于集成测试,但在需要的地方查看 Mockito.timeout( ), 请参阅上面的示例了解如何使用。希望这有帮助吗?