所以我有以下东西:一个spring引导应用程序,它从侦听来自队列的消息开始,并为它处理它们以及一些ut和it。现在,通过集成测试类,我想验证如果向输入队列发送大量消息,应用程序是否不会崩溃。
对于发布,从这个方法测试,我连接到队列并发布一些虚拟消息,然后我使用Mockito#spy
启动一个新线程。到目前为止,其他IT只存在一条消息。然后,我使用ArgumentCaptor
来查看我发送到队列的消息是否被应用程序线程成功处理。
我不知道如何做的是等待执行数千个处理方法调用,以确保应用程序不会崩溃。在从队列中读取所有消息后,测试应该不会抛出异常而结束(我不会验证消息,因为现在不需要验证消息)。处理时间应在1 - 2小时之间。
我读过关于CountDownLatch
,但不能弄清楚如何等待线程执行,只要它需要处理我所有的消息,如果这确实是一个帮助使用。
谁能建议一个实现设计,我想在这里做什么?或者有没有可能我想做的事情是不可能的?
提前感谢!
更新:我不能修改被测试的应用程序方法或类,那么是否有方法可以检索对我的方法的调用次数?感谢@Mykhailo Kovalskyi
尝试等待。在这个特殊的情况下,测试用例应该异步地开始消息处理,然后使用await来等待条件。
它将永远等待,直到条件满足。
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;
}
};
}