代码之家  ›  专栏  ›  技术社区  ›  riccardo.cardin

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

  •  6
  • riccardo.cardin  · 技术社区  · 7 年前

    在我的测试过程中,我面临着一个非常恼人的问题 弹簧防尘套 应用我有一个使用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公开了一个专用的RESTAPI @RestController . 我想单独测试这个rest控制器,如下所示。

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

    问题是我无法避免Spring上下文来启动中定义的流 KafkaStreamConfiguration 班在执行期间,我没有找到任何方法将此类从Spring上下文中排除 RestControllerTest .

    我不想申报 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。

    1 回复  |  直到 7 年前
        1
  •  3
  •   James    7 年前

    我为我的测试控制器构建测试,在这里我明确定义了配置类。这允许我根据需要混合使用真实配置和模拟配置。所以你应该能够模仿卡夫卡和其他你没有测试的东西。

    这是我如何注释测试类的:

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

    我自动连接MockMvc来测试API:

    @Autowired
    private MockMvc mockMvc;