这是应该验证是否呼叫的方法呼叫。
Mockito.verify(messageHandler).handleMessage(message);
这个方法是在prepareContext()方法中调用的,prepareContext()方法是由执行器调用的。
executor.execute(() -> prepareContext())
当我试图验证时,我得到一个错误,它说,
wanted, but not invoked:
messageHandler.handleMessage(message);
实际上我理解为什么它没有被验证,因为验证器线程没有调用handleMessage方法,而是实际上被另一个线程调用了。所以,请给出这里应该做什么的建议,以便能够测试这个功能。
1条答案
按热度按时间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