如何在Spring Boot测试用例运行时禁用SQS监听器?
如何在Spring Boot测试中禁用SQS监听器
针对你的场景(Spring Boot 2.7.5 + JUnit 4.13.2),完全可以在测试时禁用SdkUploadListener,而且不需要用Mock就能实现,下面是几种实用方案:
方案一:利用Spring Profile隔离生产与测试组件
- 给
SdkUploadListener添加@Profile("!test")注解,意味着只有非test环境才会加载这个组件:
@Profile("!test") @Component public class SdkUploadListener { @SqsListener("your-queue-name") public void handleMessage(String message) { // 业务逻辑 } }
- 在你的
AirflowClientTest测试类上添加@ActiveProfiles("test"),强制启用test环境:
@RunWith(SpringRunner.class) @SpringBootTest @ActiveProfiles("test") public class AirflowClientTest { // 测试逻辑 }
方案二:测试时直接排除指定组件
在@SpringBootTest注解里通过exclude属性排除SdkUploadListener,这样Spring上下文就不会加载这个监听器:
@RunWith(SpringRunner.class) @SpringBootTest(exclude = SdkUploadListener.class) public class AirflowClientTest { // 测试逻辑 }
如果组件是通过自动配置类注册的,也可以排除对应的自动配置类(比如Spring Cloud AWS的SQS自动配置类)。
方案三:通过配置属性禁用SQS监听器
如果使用的是Spring Cloud AWS的SQS starter,直接在测试配置里禁用监听器功能即可:
- 在
src/test/resources/application-test.yml中添加:
spring: cloud: aws: sqs: listener: enabled: false
- 然后测试类同样加上
@ActiveProfiles("test")加载这个配置。
是否需要Mock?
不需要。Mock一般用于需要验证组件交互逻辑(比如验证监听器是否收到消息)的场景,而你只是想在测试时阻止监听器启动,用上面的方案就能直接实现,不需要额外Mock。
内容的提问来源于stack exchange,提问作者Lesha Pipiev
相关产品推荐
相关产品推荐

