模拟等待来自新线程的方法执行多次



所以我有以下东西:一个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;
            }
      };
}

相关内容

  • 没有找到相关文章

最新更新