在我的 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。我想隔离测试这个休息控制器,如下所示。
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK)
@AutoConfigureMockMvc
public class RestControllerTest {
@Test
public void someFancyTest() {
// Omissis
}
}
问题是我无法避免Spring上下文启动KafkaStreamConfiguration
类中定义的流。在执行RestControllerTest
期间,我没有找到任何方法从Spring上下文中排除此类。
我不想在KafkaEmbedded
课程中声明RestControllerTest
个实例。在我看来这是胡说八道。
有可能吗?如何切片测试以维持某种独立性顺序?
应用程序类尽可能简单。
@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。
答案 0 :(得分:2)
我为我的测试控制器构建测试,我明确定义了配置类。这允许我根据需要混合实际配置和模拟配置。所以你应该可以模拟Kafka以及你没有测试的任何其他东西。
这就是我对测试类进行注释的方法:
@RunWith(SpringRunner.class)
@Import({
MockIntegrationConfiguration.class,
RealConfiguration.class,
})
@WebMvcTest(RestController.class)
public class RestControllerTest {
我自动连线MockMvc来测试API:
@Autowired
private MockMvc mockMvc;