将模拟处理程序传递给TestClass的构造函数.
然后使用Mockito.verify()声明调用了callHandler()方法.
涉及并发
您可以在CountDownLatch上倒数一个答案,以使测试等待处理程序被击中.等待将涉及设置合理的超时时间,这可能很棘手,您不希望它太高,否则失败会使测试运行更长的时间,而又不会太低,因此您不会得到误报.
Handler handler = mock(Handler.class);
CountDownLatch finished = new CountDownLatch(1);
doAnswer(invocation -> {
finished.countDown();
return null;
}).when(handler).callHandler();
TestClass testClass = new TestClass(executor, handler);
testClass.doSomething("thisThing");
boolean ended = finished.await(10, TimeUnit.SECONDS);
assertThat(ended).isTrue();
verify(handler).callHandler();
绕过并发
如果仅尝试确定是否调用了处理程序,则可以使用在同一线程上执行的Executor.这将使测试更加稳定.
Handler handler = mock(Handler.class);
Executor executor = new Executor() {
@Override
public void execute(Runnable command) {
command.run();
}
};
TestClass testClass = new TestClass(executor, handler);
testClass.doSomething("thisThing");
verify(handler).callHandler();