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

vybvopom  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(355)

这是应该验证是否呼叫的方法呼叫。

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

这个方法是在prepareContext()方法中调用的,prepareContext()方法是由执行器调用的。

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

当我试图验证时,我得到一个错误,它说,

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

实际上我理解为什么它没有被验证,因为验证器线程没有调用handleMessage方法,而是实际上被另一个线程调用了。所以,请给出这里应该做什么的建议,以便能够测试这个功能。

g6ll5ycj

g6ll5ycj1#

问题可能是当你验证的时候,你的mock还没有被其他线程调用。如果你能在你的测试中创建一个执行者,在调用者线程中执行提交的任务,那么这个问题就很有可能解决了。在guava库中有这样一个执行者,它可以用MoreExecutors.directExecutor()来示例化,https://guava.dev/releases/snapshot-jre/api/docs/com/google/common/util/concurrent/MoreExecutors.html#directExecutor()
另一种方法是 * 等待 * 验证成功。这可以通过awaitility框架(http://www.awaitility.org)很容易地实现。这里有一个很好的介绍:https://www.baeldung.com/awaitility-testing

相关问题