Mockito等待新线程中的方法执行多次

kd3sttzy  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(173)

因此,我有以下内容:一个spring Boot 应用程序,它通过侦听来自队列的消息并处理它们以及它的一些UT和IT来启动。现在,从一个集成测试类,我想验证如果我向输入队列发送大量消息,我的应用程序不会崩溃。
对于发布,从这个方法测试,我连接到队列并发布一些虚拟消息,然后我使用Mockito#spy启动一个新线程。到目前为止,其他IT只存在一条消息。然后我使用ArgumentCaptor来查看我发送到队列的消息是否被我的应用程序线程成功处理。
我不知道该怎么做的是等待数千个处理方法调用的执行,以确保应用程序不会崩溃。测试应该在所有消息从队列中读取后结束,没有异常抛出(我没有验证消息,因为现在不需要)。处理时间应该在1到2小时之间。
我读过关于CountDownLatch的文章,但不知道如何等待线程执行,只要它需要处理我所有的消息,如果这确实是一个帮助使用。
有人能为我在这里尝试做的事情提出一个实现设计吗?或者有没有可能我尝试做的事情是不可能的?
提前感谢!
更新:我不能修改测试的应用程序方法或类,那么有没有一种方法可以检索对我的方法的调用次数?

myzjeezk

myzjeezk1#

尝试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;
            }
      };
}


更多示例请参见用法页面。

相关问题