У меня есть набор тестов, для которых требуется база данных. Я хочу создать базу данных в начале их выполнения и удалить в конце.
Из maven я также добавил RunListener в плагин maven-surefire, и он отлично работает. Также я добавил переменную системного свойства с именем ismaven. Когда я выполняю тест из maven, эта переменная инициализируется, но когда я выполняю тесты из Eclipse, эта переменная имеет значение null (я обращаюсь к переменной с помощью System.getProperty).
<configuration>
<properties>
<property>
<name>listener</name>
<value>com.mycompany.MyRunListener</value>
</property>
</properties>
<systemPropertyVariables>
<ismaven>true</ismaven>
</systemPropertyVariables>
</configuration>
Все мои тесты базы данных наследуются от класса, который имеет методы @BeforeClass и @AfterClass. Эти методы проверяют, выполняется ли тест Maven или Eclipse, проверяя значение свойства ismaven. Если тест выполняется maven, свойство ismaven имеет значение, и они делают что угодно. Но если тест выполняется Eclipse, переменная ismaven имеет значение null, и они запускают (@BeforeClass) или останавливают (@AfterClass) базу данных:
@BeforeClass
public static void checkIfStartDatabase() {
String ismaven = System.getProperty("ismaven");
// If it is not maven, start the database
if (ismaven == null) {
startDatabase();
}
}
@AfterClass
public static void checkIfStopDatabase() {
String ismaven = System.getProperty("ismaven");
// If it is not maven, stop the database
if (ismaven == null) {
stopDatabase();
}
}
Это решение не решит вашу проблему на 100%, но если вы его реализуете, вы сможете выполнять (и отлаживать) все тесты одного класса JUnit с помощью Eclipse, а также выполнять все тесты вашего проекта с помощью Maven с гарантией того, что вы будет выполнять один раз фрагмент кода до или после выполнения всех ваших тестов.
person
Jorge Piera Llodrá
schedule
03.10.2014