当前位置: 首页 > 知识库问答 >
问题:

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

许远航
2023-03-14

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

有什么方法可以强制Spring Boot与Tomcat保持一致吗?

共有3个答案

慎望
2023-03-14

使用Spring引导 2.5.10

@AutoConfigureBefore(ServletWebServerFactoryAutoConfiguration.class)

对我没用。

但是正如sven doring提到的,排除< code > embedded webserverfactorycustomizerautoconfiguration 对我很有效。它甚至适用于外部tomcat

代码在下面

@SpringBootApplication(exclude = org.springframework.boot.autoconfigure.web.embedded.EmbeddedWebServerFactoryCustomizerAutoConfiguration.class)
索卓
2023-03-14

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

也许我有特殊情况,在主类中没有< code > spring boot application 。我在测试类中只有一个< code > spring boot application 。

无论如何,这对我来说是有效的:

@SpringBootApplication(exclude = org.springframework.boot.autoconfigure.web.embedded.EmbeddedWebServerFactoryCustomizerAutoConfiguration.class)
public class TestApplication {
}
姬成荫
2023-03-14

正如斯蒂芬·尼科尔在这里所说的,您应该定义一个空的< code > TomcatEmbeddedServletContainerFactory < code > @ 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();
    }
}
 类似资料:
  • 与@mockbean和@spybean一样,有没有类似于@fakebean/@dummybean的东西? 其思想是,该实例是100%真实的(具有预期的生产内部状态),并且它覆盖(或者添加bean,以防在配置中没有声明)上下文中的bean。理想情况下,您不需要创建TestConfiguration类并将其设置为Primary,因为这样可以在每个测试的基础上控制假冒,只有在需要时才可以。否则它使用主的

  • 我正在尝试如何在使用Eureka的Spring Boot应用程序上构建集成测试。说我有考试 我的代码路径中有该 api 调用: 这将NPE。发现客户端返回为空。如果我直接启动 Spring 启动应用程序并自己使用 API,代码工作正常。我在任何地方都没有特定的个人资料用法。我需要为发现客户端配置一些特殊的 wrt Eureka 以进行测试吗?

  • 我有几个繁重的Spring集成测试(是的,这不是最好的方法,我没有时间正确地模拟所有外部dep) 下面是测试的典型注释 由于以下原因,测试会定期失败: 这里有两个问题:1、让测试共存的正确方式是什么?我在surefire插件中设置了forkCount=0。好像有帮助 2.1. 在每次测试期间,我实际上不需要启动所有的

  • 我有一个SpringBoot应用程序,它有一个控制器类、一个服务和一个存储库,运行得非常好。我已经为相同的应用程序添加了Junit测试用例,而且效果也非常好。 下面是测试类。 测试用例一直通过,但目前我正在添加另一个API,如下所示,所有测试都失败了。 下面是测试类。 添加部门服务后,测试用例失败,错误如下: 干杯!