Junit用于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与另一个对象进行交互,而这是您真正想验证的相互作用,如果是这种情况,我的代码和测试看起来像:

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(),请参见上面的示例,了解如何使用。希望这会有所帮助吗?

相关内容

  • 没有找到相关文章

最新更新