为什么我的@AfterClass方法被多次调用?

时间:2014-04-08 12:01:16

标签: java maven junit4 surefire

为了测试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>

1 个答案:

答案 0 :(得分:1)

好的,似乎这个问题有点遗漏了这一点,因为@BeforeClass和@AfterClass的行为是预期的。

我添加了一个后续问题来解决我的真正问题:

How can I initialize a Spring applicationContext just once for all tests