我有一只灰熊HttpServer
,我想在整个测试组执行期间运行它。此外,我想从@Rule
测试本身内部与全局 HttpServer 实例进行交互。
由于我使用的是 Maven Surefire 而不是 JUnit 测试套件,因此我不能在测试套件本身上使用@BeforeClass
/ 。@AfterClass
现在,我能想到的只是懒惰地初始化一个静态字段并停止服务器Runtime.addShutdownHook()
——不好!
我有一只灰熊HttpServer
,我想在整个测试组执行期间运行它。此外,我想从@Rule
测试本身内部与全局 HttpServer 实例进行交互。
由于我使用的是 Maven Surefire 而不是 JUnit 测试套件,因此我不能在测试套件本身上使用@BeforeClass
/ 。@AfterClass
现在,我能想到的只是懒惰地初始化一个静态字段并停止服务器Runtime.addShutdownHook()
——不好!
有两种选择,一个 Maven 解决方案和一个万无一失的解决方案。耦合最少的解决方案是在pre-integration-test
andpost-integration-test
阶段执行插件。请参阅构建生命周期简介 - 生命周期参考。我不熟悉 grizzly,但这里有一个使用码头的例子:
<build>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<configuration>
<contextPath>/xxx</contextPath>
</configuration>
<executions>
<execution>
<id>start-jetty</id>
<phase>pre-integration-test</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
</configuration>
</execution>
<execution>
<id>stop-jetty</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>
注意start
ispre-integration-test
和stop
is的相位post-integration-test
。我不确定是否有 grizzly maven 插件,但您可以改用maven-antrun-plugin。
第二个选项是使用 JUnit RunListener。RunListener
监听测试事件,如测试开始、测试结束、测试失败、测试成功等。
public class RunListener {
public void testRunStarted(Description description) throws Exception {}
public void testRunFinished(Result result) throws Exception {}
public void testStarted(Description description) throws Exception {}
public void testFinished(Description description) throws Exception {}
public void testFailure(Failure failure) throws Exception {}
public void testAssumptionFailure(Failure failure) {}
public void testIgnored(Description description) throws Exception {}
}
所以你可以听 RunStarted 和 RunFinished。这些将启动/停止您想要的服务。然后,在万无一失的情况下,您可以指定一个自定义侦听器,使用:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.10</version>
<configuration>
<properties>
<property>
<name>listener</name>
<value>com.mycompany.MyResultListener,com.mycompany.MyResultListener2</value>
</property>
</properties>
</configuration>
</plugin>