You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Spring Boot测试用例运行时禁用SQS监听器?

如何在Spring Boot测试中禁用SQS监听器

针对你的场景(Spring Boot 2.7.5 + JUnit 4.13.2),完全可以在测试时禁用SdkUploadListener,而且不需要用Mock就能实现,下面是几种实用方案:

方案一:利用Spring Profile隔离生产与测试组件

  1. 给SdkUploadListener添加@Profile("!test")注解,意味着只有非test环境才会加载这个组件:
@Profile("!test")
@Component
public class SdkUploadListener {
    @SqsListener("your-queue-name")
    public void handleMessage(String message) {
        // 业务逻辑
    }
}
  1. 在你的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 15:55:37