为了测试REST服务,我构建了一个基类'RestTestBase'来启动嵌入式Jetty服务器:
class RestTestBase {
protected static AnnotationConfigWebApplicationContext rootCtx;
protected static AnnotationConfigWebApplicationContext webCtx;
private static Server jettyServer;
@BeforeClass
public static void initSpringAndJetty() {
if(jettyServer == null) {
// init jetty and spring
}
}
@AfterClass
public static void shutdownJetty() {
if(jettyServer!=null && jettyServer.isRunning()) {
// shutdown jetty and stop spring contexts
}
}
}
当我在Eclipse IDE的单线程环境中运行它时,一切都很好。 Jetty和Spring只初始化一次,然后我的所有测试都运行,然后关闭了jetty。
但是,当我在Maven Surefire的多线程环境中运行它时,Jetty服务器会针对每个测试重新初始化。这是为什么?
这是我的万无一失配置:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<forkCount>0</forkCount>
<reuseForks>true</reuseForks>
</configuration>
</plugin>
</plugins>
</build>
答案 0 :(得分:1)
我添加了一个后续问题来解决我的真正问题:
How can I initialize a Spring applicationContext just once for all tests