2013-05-28 4 views
11

мой вопрос очень похож на этот: maven-failsafe-plugin Failures and BUILD SUCCESS?maven-отказоустойчивый-плагин Ошибки и BUILD SUCCESS?

и мне удается настроить отказоустойчивый плагин, если он завершился неудачно.

Но если тест переходит в состояние ошибки, отказоустойчивый плагин по-прежнему не прерывает сборку.

................. 
------------------------------------------------------- 
    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:\projects\oec-integration-server\trunk\oec-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:\projects\oec-integration-server\trunk\oec-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"); 
    } 
} 

если я раскомментировать неудачу() вся сборка не удается правильно, с билда не удалось. , но если я просто выброшу исключение, это не сработает, как показано выше.

конфигурации 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 и тесты с ошибкой вручную.

ответ

18

Вам необходимо иметь два блока исполнения, потому что цель проверки maven-failafe-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-отказоустойчивого плагина до 2.14.1 вместо 2.7. Обновление: Тем временем обновление до 2.17.

+0

спасибо, что работало, но не в 2.7 , поэтому мне пришлось обновить версию, как вы упомянули. – udik

+0

Как указано в [этом вопросе] (http://stackoverflow.com/questions/12279160/maven-failsafe-plugin-failures-and-build-success) - «правильный решение - использовать отказоустойчивые, как предполагалось. Интеграция Цель теста специально разработана, чтобы не сбивать сборку ». Поэтому, хотя эта информация верна, это не ответ на вопрос. – charneykaye

0

Пожалуйста, убедитесь, что Maven свойство «maven.test.failure.ignore» не установлено значение «истина» в любой из ваших файлов Maven pom.xml, так как это может быть единственной причиной не остановить сборку после отказа теста.

+0

нет У меня нет никаких настроек, я согласен ответить ниже – udik

0

Есть одна возможная дополнительная причина, по которой это происходит. Проверка Failsafe ищет классы тестов и ожидает, что они будут в $ {project.build.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> 
6

Если вы работаете интеграционные тесты, как это:

mvn test-compile failsafe:integration-test 

Тогда вы должны знать, что в соответствии с maven documentation on failsafe:

Плагин Failsafe будет не прерывать сборку во время фазы интеграции, тем самым позволяя выполнить этап после интеграции.

Я был в состоянии получить сборку, чтобы потерпеть неудачу, как это:

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> 
+0

Спасибо. Я просто изменил список целей, которые нужно выполнить при тестировании интеграции, чтобы добавить 'failafe: verify', как вы предлагаете, и он работал по назначению: результат FAILURE вместо SUCCESS. Это был недостающий шаг, чтобы заставить его работать. – manuelvigarcia

+0

Это правильный ответ. Только «отказоустойчивый: проверка» * * разработан *, чтобы привести к сбою сборки при сбое теста интеграции. – charneykaye

+0

Кроме того, простой «mvn verify» также даст ожидаемый результат. – charneykaye

 Смежные вопросы

  • Нет связанных вопросов^_^