Maven-failsafe-ошибки плагина и успех сборки?
мой вопрос очень похож на этот: maven-failsafe-ошибки плагина и успех сборки?
и мне удается настроить отказоустойчивый плагин, чтобы потерпеть неудачу, если тесты терпят неудачу.
но если тест переходит в состояние ошибки, отказоустойчивый плагин по-прежнему не нарушает сборку.
.................
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running xxxxx.IntegrationTierFunctionalTestCase
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.054 sec <<< FAILURE!
Results :
Tests in error:
testException(xxxxx.IntegrationTierFunctionalTestCas
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0
[WARNING] File encoding has not been set, using platform encoding Cp1252, i.e. build is
[INFO] [failsafe:verify {execution: functional-test-1024}]
[INFO] Failsafe report directory: C:projectsoec-integration-servertrunkoec-integrati
[WARNING] File encoding has not been set, using platform encoding Cp1252, i.e. build is
[INFO] [failsafe:integration-test {execution: functional-test-24}]
[INFO] Failsafe report directory: C:projectsoec-integration-servertrunkoec-integrati
.............
[INFO] ------------------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 58 seconds
[INFO] Finished at: Tue May 28 17:48:13 BST 2013
[INFO] Final Memory: 114M/781M
[INFO] ------------------------------------------------------------------------
для simplicy IntegrationTierFunctionalTestCase содержит только этот код
import org.junit.Test;
import static org.junit.Assert.fail;
public class IntegrationTierFunctionalTestCase
{
@Test
public void testException(){
//fail();
throw new RuntimeException("super error");
}
}
Если я раскомментирую fail (), вся сборка завершится ошибкой, с ошибкой сборки. но если я просто выбрасываю исключение, оно терпит неудачу, как показано выше.
конфигурация плагина oour выглядит следующим образом
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.7</version>
<configuration>
<redirectTestOutputToFile>true</redirectTestOutputToFile>
<systemPropertyVariables>
<oec.env>TEST</oec.env>
<mule.test.timeoutSecs>2400</mule.test.timeoutSecs>
</systemPropertyVariables>
<additionalClasspathElements>
<additionalClasspathElement>${basedir}/src/main/resources/config</additionalClasspathElement>
</additionalClasspathElement>
</additionalClasspathElements>
</configuration>
<executions>
<execution>
<id>functional-test-1024</id>
<phase>test</phase>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
<configuration>
<includes>
<include>**/IntegrationTierFunctionalTestCase.java</include>
</includes>
<forkMode>once</forkMode>
<argLine>-XX:MaxPermSize=256M -Xmx1024M</argLine>
</configuration>
</execution>
</executions>
</plugin>
что я упустил? И нет, я не хочу заворачивать его в блоки try-catch и проваливать тесты вручную.
4 ответов
вам нужно иметь два блока выполнения, потому что цель проверки Maven-failsafe-plugin предназначена для проверки результатов интеграционных тестов.
<executions>
<execution>
<id>functional-test-1024</id>
<phase>test</phase>
<goals>
<goal>integration-test</goal>
</goals>
<configuration>
<includes>
<include>**/IntegrationTierFunctionalTestCase.java</include>
</includes>
<forkMode>once</forkMode>
<argLine>-XX:MaxPermSize=256M -Xmx1024M</argLine>
</configuration>
</execution>
<execution>
<id>verify</id>
<phase>verify</phase>
<goals>
<goal>verify</goal>
</goals>
</execution>
</executions>
кроме того, вы должны обновить версию Maven-failsafe-plugin до 2.14.1 вместо 2.7. обновление: в то же время обновления 2.17.
Если вы запускаете интеграционные тесты следующим образом:
mvn test-compile failsafe:integration-test
тогда вы должны знать, что согласно Maven документация по отказоустойчивости:
отказоустойчивый плагин не подведет сборку во время этапа тестирования интеграции, что позволит выполнить этап после тестирования интеграции.
я смог заставить сборку потерпеть неудачу так:
mvn test-compile failsafe:integration-test failsafe:verify
и вот моя отказоустойчивая конфигурация для ссылка:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.19</version>
<configuration>
<includes>
<include>**/*IT.java</include>
</includes>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
</goals>
</execution>
</executions>
</plugin>
пожалуйста, убедитесь, что свойство maven " maven.тест.неудача.игнорировать "не установлено в "true" в любом из ваших Maven pom.xml-файлы, так как это может быть единственной причиной не остановите сборку после сбоя теста.
есть одна возможная дополнительная причина, почему это происходит. Failsafe verify ищет тестовые классы и ожидает, что они будут в ${project.строить.directory} / test-classes-если у вас другая настройка, он просто напечатает "нет тестов для запуска."и заканчивается, если построить успех независимо от того, что результат интеграции-тестовый этап был.
вы должны установить testClassesDirectory в настройки плагина :
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<systemPropertyVariables>
<environmentType>${environmentType}</environmentType>
</systemPropertyVariables>
<summaryFile>${project.build.directory}/failsafe-reports/failsafe-summary.xml</summaryFile>
<testClassesDirectory>${project.build.directory}/classes</testClassesDirectory>
<suiteXmlFiles>
<suiteXmlFile>${suiteXml}</suiteXmlFile>
</suiteXmlFiles>
</configuration>