使用 Mockito 尝试验证方法调用,其中调用了 Executor.execute 方法

问题描述 投票:0回答:2

这是需要验证的方法调用,是否被调用。

 Mockito.verify(messageHandler).handleMessage(message);

这个方法是在prepareContext()方法内部调用的,该方法是由executor调用的。

executor.execute(() -> prepareContext())

当我尝试验证时,我收到错误消息,

wanted, but not invoked:
  messageHandler.handleMessage(message);

其实我明白为什么没有被验证,因为验证者线程并不是在调用handleMessage方法,而是实际上是被另一个线程调用的。 因此,请提出任何关于此处应该做什么的建议,以便能够测试此功能。

java mockito executor
2个回答
0
投票

问题可能是你验证时你的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


0
投票

尝试使用 SynchronousExecutor() 并将其注入其中,它将使您的代码像同步一样运行

© www.soinside.com 2019 - 2024. All rights reserved.