Может быть подходящий обходной путь , но это зависит от ваших требований, и вам нужно использовать CI-сервер, который может обрабатывать коды возврата процесса jvm.
Основная идея заключается в том, чтобы полностью остановить процесс JVM в Maven и сообщить ОС, что процесс неожиданно остановился. Затем сервер непрерывной интеграции, такой как Jenkins / Hudson , должен иметь возможность проверять ненулевой код выхода и сообщать, что тест не пройден.
Первый шаг - убедиться, что выход из JVM завершен при первом неудачном тестировании. Вы можете сделать это с помощью JUnit 4.7 или выше, используя пользовательский RunListener
(поместите его в src / test / java):
package org.example
import org.junit.runner.notification.Failure;
import org.junit.runner.notification.RunListener;
public class FailFastListener extends RunListener {
public void testFailure(Failure failure) throws Exception {
System.err.println("FAILURE: " + failure);
System.exit(-1);
}
}
Затем вам нужно настроить этот класс, чтобы верный регистратор зарегистрировал его в JUnit 4 Runner. Отредактируйте pom.xml
и добавьте свойство конфигурации listener
в подключаемый модуль maven-surefire-plugin. Вам также нужно будет настроить верный запуск, чтобы не создавать новый процесс JVM для выполнения тестов. В противном случае он просто продолжится со следующими тестами.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.10</version>
<configuration>
<forkMode>never</forkMode>
<properties>
<property>
<name>listener</name>
<value>org.example.FailFastListener</value>
</property>
</properties>
</configuration>
</plugin>
Если это не поможет, я попробую подключить плагин maven surefire junit провайдера.
Кстати, модульные тесты, по определению, должны выполняться быстрее, чем 0,1 секунды. Если ваша сборка действительно занимает много времени из-за модульных тестов, вам придется заставить их работать быстрее в будущем.