Faire exécuter tous les tests par Maven, même lorsque certains échouent

243

J'ai un projet avec plusieurs modules. Lorsque tous les tests réussissent, le test Maven les exécute tous.

Lorsque les tests échouent dans le premier module, maven ne passera pas au projet suivant. J'ai testFailureIgnore défini sur true dans les paramètres Surefire, mais cela n'aide pas.

Comment puis-je faire exécuter tous les tests par maven?

ripper234
la source
Quelle version du plugin maven-surefire?
Pascal Thivent

Réponses:

359

Dans la documentation de Maven Embedder :

-fae, --fail-at-end Échouez seulement la construction après; permettre à toutes les versions non impactées de continuer

-fn, --fail-never NE JAMAIS échouer la construction, quel que soit le résultat du projet

Donc, si vous testez un module, vous pouvez l'utiliser en toute sécurité -fae.

Sinon, si vous avez plusieurs modules et si vous voulez tous les tester (même ceux qui dépendent du module de tests défaillant), vous devez exécuter mvn clean install -fn.
-faecontinuera avec le module dont le test a échoué (exécutera tous les autres tests), mais tous les modules qui en dépendent seront ignorés.

despote
la source
1
en outre, vous pouvez ajouter -e pour que la cmd fournisse des informations d'erreur.
despote
11
Je viens de tester l'option --fail-never. Maven n'échouera pas la construction même s'il y a des erreurs de compilation. Si j'utilise cette option sur Jenkins, la construction semble réussie même si elle contient beaucoup d'erreurs de compilation. Je préfère -Dmaven.test.failure.ignore=truedans ce cas et laisse Jenkins analyser les rapports infaillibles.
fuemf5
@wlnirvana J'ai édité le post maintenant avec ce lien (alors n'hésitez pas à supprimer votre commentaire ...)
Steve Chambers
93

Je viens de trouver le paramètre "-fae", qui fait que Maven exécute tous les tests et ne s'arrête pas en cas d'échec.

ripper234
la source
3
Malheureusement, ce paramètre ne fonctionne pas lorsque je le passe à TeamCity.
ripper234
4
Dans un projet multi-modules, les modules qui dépendent d'un module dont les tests ont échoué seront ignorés. Utilisez plutôt -fn.
hipokito
2
@ ripper234 avez-vous trouvé un moyen de le faire fonctionner sur TeamCity?
Jeredriq Demas
86

Pouvez-vous tester avec surefire 2.6 et configurer surefire avec testFailureIgnore=true. Ou sur la ligne de commande:

mvn install -Dmaven.test.failure.ignore=true
Pascal Thivent
la source
16
IIRC cela a pour effet que la construction entière n'échoue pas, plutôt que d'exécuter tous les tests et échoue à la fin.
Ondra Žižka
1
C'est la seule option qui a fonctionné pour moi ... L'option "-fae" n'a rien fait sur les échecs de test
Yoi
38

Essayez d'ajouter la configuration suivante pour le plugin surefire dans votre pom.xml de projet racine :

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
          <testFailureIgnore>true</testFailureIgnore>
        </configuration>
      </plugin>
    </plugins>
  </build>
  [...]
</project>
nybon
la source
17

Une réponse rapide:

mvn -fn test

Fonctionne avec les versions de projet imbriquées.

rustyx
la source