使用 Spring Boot 1.5 避免 Kafka Streams 在测试中启动

Avoiding Kafka Streams to start in tests using Spring Boot 1.5

Spring Boot 应用程序的测试过程中,我遇到了一个非常烦人的问题。我有一个使用 Kafka Streams 并在专用 配置文件.

中声明它们的应用程序
@EnableKafka
@EnableKafkaStreams
@Configuration
public class KafkaStreamConfiguration {
    @Bean(name = KafkaStreamsDefaultConfiguration.DEFAULT_STREAMS_CONFIG_BEAN_NAME)
    public StreamsConfig kStreamsConfigs() {
        // Omissis
    }
    @Bean
    public KStream<String, String> kStream() {
        // Omissis
    }
}

我的应用程序还使用 Spring @RestController 公开了专用的 REST API。我想单独测试这个 rest 控制器,如下所示。

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK)
@AutoConfigureMockMvc
public class RestControllerTest {
    @Test
    public void someFancyTest() {
        // Omissis
    }
}

问题是我无法避免 Spring 上下文来启动 KafkaStreamConfiguration class 中定义的流。在执行 RestControllerTest.

期间,我没有找到任何方法从 Spring 上下文中排除此 class

我不想在 RestControllerTest class 中声明一个 KafkaEmbedded 实例。在我看来是胡说八道。

可能吗?我怎样才能对测试进行切片以保持一定的独立顺序?

申请class越简单越好。

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

我正在使用 Spring 引导版本 1.5.8 和 Kafka 版本 0.10.2.1。

我为我的测试控制器构建测试,我在其中明确定义配置 classes。这允许我根据需要混合真实配置和模拟配置。所以你应该能够模拟出 Kafka 和任何你没有测试的东西。

这就是我注释测试的方式 class:

@RunWith(SpringRunner.class)
@Import({
    MockIntegrationConfiguration.class,
    RealConfiguration.class,
})
@WebMvcTest(RestController.class)
public class RestControllerTest {

然后我自动连接 MockMvc 来测试 API:

@Autowired
private MockMvc mockMvc;