Выполнение кода до и после всех тестов при выполнении surefire
у меня есть Гризли HttpServer
который я хочу запустить в течение всего времени выполнения тестовой группы. Кроме того, я хочу взаимодействовать с глобальным экземпляром HttpServer из @Rule
внутри самих испытаний.
поскольку я использую maven Surefire, а не тестовые наборы JUnit, я не могу использовать @BeforeClass
/@AfterClass
на сам тест люкс.
прямо сейчас, все, о чем я могу думать, это лениво инициализировать статическое поле и остановить сервер от Runtime.addShutdownHook()
-- не мило!
1 ответов
существует два варианта: решение maven и верное решение. Наименее связанное решение-выполнить плагин в pre-integration-test
и post-integration-test
этап. См.введение в жизненный цикл сборки-Lifecycle Reference. Я не знаком с grizzly, но вот пример использования jetty:
<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
is pre-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. Они будут запускать / останавливать службы, которые вы хотите. Затем в surefire вы можете указать пользовательский прослушиватель, используя:
<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>
это Плагин Maven Surefire, Используя JUnit, используя пользовательские слушатели и репортеры