如何使用带有 gradle 的多个嵌入式服务器运行 spring-boot 集成测试
Posted
技术标签:
【中文标题】如何使用带有 gradle 的多个嵌入式服务器运行 spring-boot 集成测试【英文标题】:how to run spring-boot integration tests with multiple embeded servers with gradle 【发布时间】:2016-11-03 15:43:27 【问题描述】:我对我的 Spring Boot 应用程序进行了一些集成测试。基于依赖项(和classpath jars)spring boot选择一个服务器启动:(tomcat是只有spring-boot-starter-web,undertow如果有spring-boot-starter-undertow或者jetty如果有spring-boot-启动码头)
我正在编写一个可以在许多不同服务器上工作的过滤器。我对任何服务器都没有编译依赖,但我想在许多服务器上测试我的代码。我该怎么做?
当然,一种方法是让 gradle 脚本根据一些环境变量设置依赖关系,然后使用不同的环境变量值调用 gradle test
几次。有没有更简单的方法,所以我可以一次测试所有内容?就像在测试中以编程方式启动服务器?还是使用一些 gradle/spring 插件?
【问题讨论】:
【参考方案1】:我的建议是为所有三个服务器添加测试范围的依赖项,但在您的测试代码中创建三个单独的 Spring Boot 应用程序类,每个应用程序类禁用 EmbeddedServletContainerAutoConfiguration
并导入适当的服务器配置:
@Profile("tomcat")
@SpringBootApplication(exclude = EmbeddedServletContainerAutoConfiguration.class)
@Import(EmbeddedServletContainerAutoConfiguration.EmbeddedTomcat.class)
public class TomcatApplication
public static void main(String[] args)
TomcatApplication.run(TomcatApplication.class, args);
@Profile("undertow")
@SpringBootApplication(exclude = EmbeddedServletContainerAutoConfiguration.class)
@Import(EmbeddedServletContainerAutoConfiguration.EmbeddedUndertow.class)
public class UndertowApplication
public static void main(String[] args)
UndertowApplication.run(UndertowApplication.class, args);
@Profile("jetty")
@SpringBootApplication(exclude = EmbeddedServletContainerAutoConfiguration.class)
@Import(EmbeddedServletContainerAutoConfiguration.EmbeddedJetty.class)
public class JettyApplication
public static void main(String[] args)
JettyApplication.run(JettyApplication.class, args);
然后,使用适当的@ActiveProfiles
集编写您的测试,您应该准备好了。
【讨论】:
以上是关于如何使用带有 gradle 的多个嵌入式服务器运行 spring-boot 集成测试的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Gradle + Spring boot 运行多个配置文件? [复制]
带有嵌入式 servlet 容器的 Spring 应用程序运行错误
如何使旧的 Eclipse 项目在带有 Gradle 的 Android Studio 上运行? [关闭]