如何从 Spring Boot 测试中禁用 kafka 连接?

Jak*_*kim 3 spring-test spring-boot spring-kafka

我正在使用 spring kafka 来消费来自 kafka 主题的消息,所以我有一个 kafka 消费者配置类:

@Configuration
class KafkaConfiguration {
 // kafka consumer configurations
}
Run Code Online (Sandbox Code Playgroud)

我有一些 JUnit 测试,它们将使用 mockMvc 加载 spring 上下文来测试我的 API,我不想测试与 kafka 消息传递相关的功能,如何阻止 kafka 仅在 JUnit 测试中消费消息?它一直失败,因为我的本地和 CI 环境中没有 kafka 服务器。

Spring 配置文件不是一个很好的选择,因为我必须编写如下代码:

@Configuration
@Profile("!unit-test")
class KafkaConfiguration {
  //kafka configuration
}
Run Code Online (Sandbox Code Playgroud)

我最终会得到仅用于测试目的而编写的生产代码,不是很干净,还有其他方法可以禁用 kafka 进行测试吗?

小智 9

添加@ConditionalOnProperty在配置类上

例子:

@ConditionalOnProperty(value = "kafka.enable", havingValue = "true", matchIfMissing = true)
Run Code Online (Sandbox Code Playgroud)

,并添加application.properties文件属性kafka.enable=false