避免使用Spring Boot 1.5的Kafka流进行测试



我在我的 spring boot 应用程序中的测试过程中面临一个非常烦人的问题。我有一个使用kafka流的应用程序,并在专用配置文件

中声明它们。
@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
    }
}

问题是我无法避免春季上下文开始在KafkaStreamConfiguration类中定义的流。在执行RestControllerTest期间,我找不到从春季上下文中排除此类的任何方法。

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

有可能吗?我如何切片测试以保持独立秩序?

应用程序类都尽可能简单。

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

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

i为我的测试控制器构建测试,我明确定义了配置类。这使我可以根据需要混合真实的配置和模拟配置。因此,您应该能够嘲笑Kafka和其他未测试的其他内容。

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

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

和我自动导线MockMVC测试API:

@Autowired
private MockMvc mockMvc;

相关内容

  • 没有找到相关文章

最新更新