所以我有以下东西:一个 Spring Boot 应用程序,它通过监听队列中的消息并处理它们以及一些 UT 和 IT 来启动。现在,在集成测试类中,我想验证如果我将大量消息发布到输入队列,我的应用程序不会崩溃。
为了发布,从这个方法测试中,我连接到队列并发布一些虚拟消息,然后使用 Mockito#spy
启动一个新线程。到目前为止,其他 IT 只针对一条消息存在。我使用 ArgumentCaptor
来查看发送到队列的消息是否已被我的应用程序线程成功处理。
我不知道该怎么做,就是等待数千个处理方法调用的执行,看看应用程序不会崩溃。从队列中读取所有消息后,测试应该结束,不会引发任何异常(我不验证消息,因为现在不需要)。处理时间应在 1 到 2 小时之间。
我读过有关 CountDownLatch
的内容,但不知道如何等待线程执行,只要它需要处理我的所有消息,如果这确实是一种辅助使用的话。
任何人都可以为我在这里尝试做的事情建议一个实现设计吗?或者我想做的事情是否有可能是不可能的?
提前致谢!
更新: 我无法修改测试的应用程序方法或类,那么有没有办法检索对我的方法的调用次数?谢谢@Mykhailo Kovalskyi
最佳答案
尝试Awaitility 。在这种特殊情况下,测试用例应该异步启动消息处理,然后使用 Awaitility 等待条件。
这个将永远等待,直到条件满足。
Awaitility.await().forever().until(conditionIsSatisfied());
或者,您可以指定最短和/或最长等待时间:
Awaitility.await().atLeast(1, HOURS).and().atMost(2, HOURS).until(conditionIsSatisfied());
其中conditionIsSatisfied
可调用,能够检查是否已经处理了预期数量的消息:
private Callable<Boolean> conditionIsSatisfied() {
return new Callable<Boolean>() {
public Boolean call() throws Exception {
return allMessagesProcessed;
}
};
}
参见usage页面以获取更多示例。
关于java - Mockito等待新线程的方法执行多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40125515/