使用 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;
在 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
.
我不想在 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;