2012-09-24 10 views
7

Ich habe 4.8.2 und Maven 3 Einige Tests in meiner Anwendung JUnit sollten die Build im Fall des Scheiterns scheitern und einige von ihnen nicht (nur berichten, dass die folgenden optionalen Tests nicht bestanden)JUnit optional/erforderliche Tests

Wie kann ich es mit Junit tun und wenn ich nicht kann dann vielleicht testingng?

z. Ich habe zwei Testfälle:

Erstens ist nicht wirklich wichtig und kann aufgrund von Verbindungs-Timeout, Service-Nichtverfügbarkeit und so weiter usw. fehlgeschlagen. Also, wenn es nicht, ich will nicht ganzen Build zum Scheitern verurteilt, nur Benutzer darüber informieren, und schreiben wirklich wichtig zu trösten

Zweitens ist und wenn es nicht - build sollte auch

nicht bestanden Ich weiß über @Ignore - es ist nicht das, wonach ich suche, weil ich keine Tests überspringen möchte.

Ich weiß über @Category also, wenn Sie wissen, wie zu konfigurieren surefire Plugin zu sagen: Wenn Kategorie com.me.Required - Build sollte im Falle eines Fehlers fehlschlagen und wenn Kategorie com.me.Optional - Build sollte nicht sein

failed
+0

Was genau ist Ihre Frage? Hast du Testfälle geschrieben, die fehlschlagen oder nicht? Wie sehen Sie aus? Wie sieht dein Pom aus? – khmarbaise

+0

Ich habe meine Frage aktualisiert. Bitte schauen Sie sich –

Antwort

3

Verwenden Sie das failsafe-Plugin für Ihre Tests, die fehlschlagen dürfen, und setzen Sie das Flag testFailureIgnore auf "true".

Um use der Failsafe-Plugin Sie das Plugin hinzufügen müssen Sie pom

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>foo.bar</groupId> 
    <artifactId>test</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 

    <dependencies> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.10</version> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-failsafe-plugin</artifactId> 
       <version>2.12.4</version> 
       <executions> 
        <execution> 
         <goals> 
          <goal>integration-test</goal> 
          <goal>verify</goal> 
         </goals> 
        </execution> 
       </executions> 
       <configuration> 
        <testFailureIgnore>true</testFailureIgnore> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

</project> 

Die todsichere Plugin wird standardmäßig Test wie Test genannt auszuführen. Das Failsafe-Plugin führt standardmäßig den Test mit dem Namen IT aus. führen wird nun

die Tests

import static org.junit.Assert.*; 

import org.junit.Test; 

public class SurefireTest { 

    @Test 
    public void test() { 
     assertTrue(true); 
    } 

} 

und

import static org.junit.Assert.*; 

import org.junit.Test; 

public class FailsafeIT { 

    @Test 
    public void test() { 
     assertTrue(false); 
    } 

} 

Da mvn install Laufen in

[INFO] Scanning for projects... 
[INFO] 
[INFO] ------------------------------------------------------------------------ 
[INFO] Building test 0.0.1-SNAPSHOT 
[INFO] ------------------------------------------------------------------------ 
[INFO] 
. 
. 
. 
------------------------------------------------------- 
T E S T S 
------------------------------------------------------- 
Running SurefireTest 
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.062 sec 

Results : 

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 
. 
. 
. 
------------------------------------------------------- 
T E S T S 
------------------------------------------------------- 
Running FailsafeIT 
Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.072 sec <<< FA 
ILURE! 
... 
Results : 

Failed tests: test(FailsafeIT) 

Tests run: 1, Failures: 1, Errors: 0, Skipped: 0 
. 
. 
. 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 3.174s 
[INFO] Finished at: Sat Sep 29 08:19:38 CEST 2012 
[INFO] Final Memory: 9M/245M 
[INFO] ------------------------------------------------------------------------ 
+0

an Ist es erlaubt testFailureIgnore auf nicht alle Tests anzuwenden?Ich glaube nicht –

+0

@Sergey Kravchenya Ich glaube nicht, dass diese Option verfügbar ist. Also schlage ich vor, den Test auszuführen, der mit dem todsicheren Plugin nicht fehlschlagen sollte, und den Test auszuführen, der mit dem Failsafe-Plugin fehlschlagen darf (und testFailureIgnore auf 'true' gesetzt) ​​ – FrVaBe

+0

ist es möglich, zwei dieser Plugins zusammen zu haben? Wenn ja, bitte editieren Sie Ihre Antwort und ich werde es als akzeptiert markieren :) Danke –

1
  1. Sie @Ignore verwenden können, finden Is there a way to skip only a single test in maven?

  2. Sie Tests in einem bestimmten Paket überspringen können Is there a way to tell surefire to skip tests in a certain package? oder http://maven.apache.org/plugins/maven-failsafe-plugin/examples/inclusion-exclusion.html oder

  3. können Sie verwenden JUn es 4.8 Kategorien JUnit Kategorien http://maven.apache.org/plugins/maven-failsafe-plugin/examples/junit.html

  4. können Sie skipITs verwenden http://maven.apache.org/plugins/maven-failsafe-plugin/verify-mojo.html#skipITs

denke ich JUnit 4.8 Kategorien ist eigentlich das, was Sie suchen.