如何强制Spring Boot在集成测试中使用Tomcat服务器?

时间:2016-03-07 13:15:54

标签: java spring-boot

我使用默认的Tomcat嵌入式容器。但是,在我的一些测试中,我使用Wiremock(在下面使用Jetty)。这使我的集成​​测试针对Jetty服务器运行,而不是Tomcat。

有没有办法强制Spring Boot坚持使用Tomcat?

2 个答案:

答案 0 :(得分:9)

正如StéphaneNic​​oll所说here你应该定义一个空的TomcatEmbeddedServletContainerFactory @Bean

简单地添加这样的豆对我来说是不够的。我得到了'多豆'的例外。当我将它添加到自定义测试启动器时,我必须确保它在EmbeddedServletContainerAutoConfiguration解析发生之前添加,即:

@Configuration
@AutoConfigureBefore(EmbeddedServletContainerAutoConfiguration.class)
public class ForceTomcatAutoConfiguration {

    @Bean
    TomcatEmbeddedServletContainerFactory tomcat() {
         return new TomcatEmbeddedServletContainerFactory();
    }
}

编辑:在Spring Boot 2.0中,这对我有用:

@Configuration
@AutoConfigureBefore(ServletWebServerFactoryAutoConfiguration.class)
public class ForceTomcatAutoConfiguration {

    @Bean
    TomcatServletWebServerFactory tomcat() {
         return new TomcatServletWebServerFactory();
    }
}

答案 1 :(得分:0)

使用Spring Boot 2.3时,上述解决方案对我不起作用。

也许我有特殊的情况,主要班级中没有SpringBootApplication。我的考试班只有SpringBootApplication

无论如何,这对我有用:

@SpringBootApplication(exclude = org.springframework.boot.autoconfigure.web.embedded.EmbeddedWebServerFactoryCustomizerAutoConfiguration.class)
public class TestApplication {
}