这是需要验证的方法调用,是否被调用。
Mockito.verify(messageHandler).handleMessage(message);
这个方法是在prepareContext()方法内部调用的,该方法是由executor调用的。
executor.execute(() -> prepareContext())
当我尝试验证时,我收到错误消息,
wanted, but not invoked:
messageHandler.handleMessage(message);
其实我明白为什么没有被验证,因为验证者线程并不是在调用handleMessage方法,而是实际上是被另一个线程调用的。 因此,请提出任何关于此处应该做什么的建议,以便能够测试此功能。
问题可能是你验证时你的mock还没有被其他线程调用。如果您可以在测试中创建一个执行程序,该执行程序在调用者线程中执行提交的任务,那么问题很可能会得到解决。在 guava lib 中有这样一个执行器,可以使用 MoreExecutors.directExecutor() 实例化,https://guava.dev/releases/snapshot-jre/api/docs/com/google/common/util/concurrent/更多Executors.html#directExecutor()
另一种方法是等待验证成功。这可以通过等待框架轻松实现(http://www.awaitility.org)。可以在这里找到很好的介绍:https://www.baeldung.com/awaitility-testing
尝试使用 SynchronousExecutor() 并将其注入其中,它将使您的代码像同步一样运行