在 Spring Boot 应用程序中集成测试 Jms 监听器/消费者的策略应该是什么?

问题描述

我们有一个 Spring Boot JMS 侦听器应用程序,它由一个 Jms 侦听器、一个服务编排类以及该编排类下的许多服务类组成。该应用程序需要集成测试。最初,我正在考虑使用 Spring Test 和 Mockito 的组合来测试它,但为了做到这一点,我需要使用创建我的模拟,然后在两个单独的线程中使用它们(线程 [main] 用于测试和线程[DefaultMessageListenerContainer-1] 用于 Jms 侦听器),据我所知,Mockito 将其状态保持在 Threadlocal 中,如其 documentation 所示。请参阅下面的报价。

Mockito 使用 ThreadLocal state 以一种充满语言的语言实现华丽的模拟语法 约束(是的,它是 java)。幸运的是,每次互动 使用 Mockito 框架,它会验证 ThreadLocal 状态,以防万一 滥用api。

鉴于此,我正在考虑有两个单独的测试类,一个将测试侦听器是否正确连接并能够接收消息,另一个将测试服务协调器和服务类的行为。请让我知道是否有其他替代方案可以让我在同一个测试类下测试这两种策略。

谢谢,

胡安

解决方法

根据我发现的 here,我将创建一个集成测试来测试 JMS 侦听器和服务编排器,并尽量减少单独集成测试的数量,以保持较短的构建时间并仍然保持覆盖质量。