我的项目有很多Test
类,如下所示:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class RefererCheckerTest {
...
每次我要运行所有测试类时,每个人都会显示如下日志:
2018-08-15 14:59:31.104 [main]信息 o.s.b.c.e.t.TomcatEmbeddedServletContainer [TomcatEmbeddedServletContainer.java:201] -Tomcat在端口上启动: 63003(http)
2018-08-15 14:59:31.112 [main]信息 c.b.s.m.filter.OAuthLoginTest [StartupInfoLogger.java:57]-已启动 OAuthLoginTest只需27.571秒(JVM运行33.229)
似乎初始化一个Spring Boot项目及其嵌入式Tomcat会花费很多时间。如果我有100个测试类,则运行所有测试类将花费27.571 seconds *100
。
在我所有的100个测试类中运行时,我只能通过一次方法来启动Spring Boot和Embedded Tomcat吗?如果这样的话,将节省时间。
答案 0 :(得分:0)
在许多情况下,可能会导致spring-context重新加载并启动新服务器,例如:
所以,让我说说我们通常在这里使用以避免这种问题的方法:
首先,我们创建一个抽象类,其中将包含测试的所有参数和配置:
@RunWith(SpringRunner.class)
@ActiveProfiles("test")
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ContextConfiguration(classes = [<your application class OR context class>])
public abstract class AbstractSpringBootTest {
}
然后,在所有测试中,我都扩展了该测试类:
public class RefererCheckerTest extends AbstractSpringBootTest {
....
}
如果它们都包含相同的配置,则这将使SpringBoot在测试期间仅启动一次。
我们当前使用的是Spring-Boot 2.0.4.RELEASE,它运行良好。
注意:我们也使用SpringRunner代替SpringJUnit4ClassRunner,它从spring-test:4.3+开始可用,并且需要JUnit 4.12 +。
此外,即使spring-boot重新启动,也应该只重新加载部分上下文,而不是重新加载所有内容并花费相同的时间。另外,请检查您如何运行测试。