所以我有以下几点:一个Spring启动应用程序,它通过侦听来自队列的消息并处理它们以及一些UT和IT来开始。现在,从集成测试类,我想验证如果我将大量消息发布到输入队列,我的应用程序不会崩溃。
对于发布,通过此方法测试,我与队列连接并发布一些虚拟消息,而不是使用Mockito#spy
启动新线程。到目前为止,只有一条消息存在于其他IT方面。比我使用ArgumentCaptor
看到我发送到队列的消息是由我的应用程序线程成功处理的。
我不知道该怎么做是等待执行数千个处理方法调用,看看应用程序是否会崩溃。在从队列中读取所有消息之后,测试应该以没有异常结束的方式结束(我现在没有验证消息,因为它不是必需的)。处理时间应在1到2小时之间。
我已经阅读了CountDownLatch
,但是只要需要处理我的所有消息,就无法弄清楚如何等待线程执行,如果这确实是一个使用帮助
有人可以建议我在这里尝试做的实施设计吗?或者我有什么机会尝试做的事情是不可能的?
提前致谢!
更新: 我无法修改测试的应用程序方法或类,所以有没有办法检索我的方法调用次数?谢谢@Mykhailo Kovalskyi
答案 0 :(得分:1)
试试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页面。