Maven ne trouve pas les tests JUnit à exécuter


417

J'ai un programme maven, il se compile très bien. Quand je l'exécute, mvn testil n'exécute aucun test (sous l'en-tête TESTs dit There are no tests to run.).

J'ai recréé ce problème avec une configuration super simple que j'inclurai ci-dessous ainsi que la sortie lors de l'exécution avec -X .

Les tests unitaires fonctionnent bien depuis eclipse (à la fois avec son package junit par défaut et quand j'inclus à la place le junit.jar téléchargé par maven). Aussi mvntest-compile crée correctement la classe sous test-classes. Je l'exécute sur OSX 10.6.7 avec Maven 3.0.2 et java 1.6.0_24.

Voici la structure du répertoire:

/my_program/pom.xml
/my_program/src/main/java/ClassUnderTest.java
/my_program/src/test/java/ClassUnderTestTests.java

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>my_group</groupId>
    <artifactId>my_program</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>My Program</name>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.5</source>
                    <target>1.5</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

ClassUnderTest.java:

public class ClassUnderTest {

    public int functionUnderTest(int n) {
        return n;
    }

}

ClassUnderTestTests.java:

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

public class ClassUnderTestTests {

    private ClassUnderTest o;

    @Before
    public void setUp() {
        o = new ClassUnderTest();
    }

    @Test
    public void testFunctionUnderTest_testCase1() {
        Assert.assertEquals(1, o.functionUnderTest(1));
    }

    @Test
    public void testFunctionUnderTest_testCase2() {
        Assert.assertEquals(2, o.functionUnderTest(2));
    }
}

Fin du test mvn -X:

[DEBUG] Configuring mojo org.apache.maven.plugins:maven-surefire-plugin:2.7.1:test from plugin realm ClassRealm[plugin>org.apache.maven.plugins:maven-surefire-plugin:2.7.1, parent: sun.misc.Launcher$AppClassLoader@5224ee]
[DEBUG] Configuring mojo 'org.apache.maven.plugins:maven-surefire-plugin:2.7.1:test' with basic configurator -->
[DEBUG]   (s) basedir = /Users/aaron/Programs/my_program
[DEBUG]   (s) childDelegation = false
[DEBUG]   (s) classesDirectory = /Users/aaron/Programs/my_program/target/classes
[DEBUG]   (s) disableXmlReport = false
[DEBUG]   (s) enableAssertions = true
[DEBUG]   (s) forkMode = once
[DEBUG]   (s) junitArtifactName = junit:junit
[DEBUG]   (s) localRepository =        id: local
      url: file:///Users/aaron/.m2/repository/
   layout: none

[DEBUG]   (f) parallelMavenExecution = false
[DEBUG]   (s) pluginArtifactMap = {org.apache.maven.plugins:maven-surefire-plugin=org.apache.maven.plugins:maven-surefire-plugin:maven-plugin:2.7.1:, org.apache.maven.surefire:surefire-booter=org.apache.maven.surefire:surefire-booter:jar:2.7.1:compile, org.apache.maven.surefire:surefire-api=org.apache.maven.surefire:surefire-api:jar:2.7.1:compile, org.apache.maven.surefire:maven-surefire-common=org.apache.maven.surefire:maven-surefire-common:jar:2.7.1:compile, org.apache.maven.shared:maven-common-artifact-filters=org.apache.maven.shared:maven-common-artifact-filters:jar:1.3:compile, org.codehaus.plexus:plexus-utils=org.codehaus.plexus:plexus-utils:jar:2.0.5:compile, junit:junit=junit:junit:jar:3.8.1:compile, org.apache.maven.reporting:maven-reporting-api=org.apache.maven.reporting:maven-reporting-api:jar:2.0.9:compile}
[DEBUG]   (s) printSummary = true
[DEBUG]   (s) project = MavenProject: my_group:my_program:1.0-SNAPSHOT @ /Users/aaron/Programs/my_program/pom.xml
[DEBUG]   (s) projectArtifactMap = {junit:junit=junit:junit:jar:4.8.1:test}
[DEBUG]   (s) redirectTestOutputToFile = false
[DEBUG]   (s) remoteRepositories = [       id: central
      url: http://repo1.maven.org/maven2
   layout: default
snapshots: [enabled => false, update => daily]
 releases: [enabled => true, update => never]
]
[DEBUG]   (s) reportFormat = brief
[DEBUG]   (s) reportsDirectory = /Users/aaron/Programs/my_program/target/surefire-reports
[DEBUG]   (s) session = org.apache.maven.execution.MavenSession@dfbb43
[DEBUG]   (s) skip = false
[DEBUG]   (s) skipTests = false
[DEBUG]   (s) testClassesDirectory = /Users/aaron/Programs/my_program/target/test-classes
[DEBUG]   (s) testFailureIgnore = false
[DEBUG]   (s) testNGArtifactName = org.testng:testng
[DEBUG]   (s) testSourceDirectory = /Users/aaron/Programs/my_program/src/test/java
[DEBUG]   (s) trimStackTrace = true
[DEBUG]   (s) useFile = true
[DEBUG]   (s) useManifestOnlyJar = true
[DEBUG]   (s) workingDirectory = /Users/aaron/Programs/my_program
[DEBUG] -- end configuration --
[INFO] Surefire report directory: /Users/aaron/Programs/my_program/target/surefire-reports
[DEBUG] Setting system property [user.dir]=[/Users/aaron/Programs/my_program]
[DEBUG] Setting system property [localRepository]=[/Users/aaron/.m2/repository]
[DEBUG] Setting system property [basedir]=[/Users/aaron/Programs/my_program]
[DEBUG] Using JVM: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java
[DEBUG] Using manager EnhancedLocalRepositoryManager with priority 10 for /Users/aaron/.m2/repository
[DEBUG] dummy:dummy:jar:1.0 (selected for null)
[DEBUG]   org.apache.maven.surefire:surefire-booter:jar:2.7.1:compile (selected for compile)
[DEBUG]     org.apache.maven.surefire:surefire-api:jar:2.7.1:compile (selected for compile)
[DEBUG] Adding to surefire booter test classpath: /Users/aaron/.m2/repository/org/apache/maven/surefire/surefire-booter/2.7.1/surefire-booter-2.7.1.jar Scope: compile
[DEBUG] Adding to surefire booter test classpath: /Users/aaron/.m2/repository/org/apache/maven/surefire/surefire-api/2.7.1/surefire-api-2.7.1.jar Scope: compile
[DEBUG] Using manager EnhancedLocalRepositoryManager with priority 10 for /Users/aaron/.m2/repository
[DEBUG] dummy:dummy:jar:1.0 (selected for null)
[DEBUG]   org.apache.maven.surefire:surefire-junit4:jar:2.7.1:test (selected for test)
[DEBUG]     org.apache.maven.surefire:surefire-api:jar:2.7.1:test (selected for test)
[DEBUG] Adding to surefire test classpath: /Users/aaron/.m2/repository/org/apache/maven/surefire/surefire-junit4/2.7.1/surefire-junit4-2.7.1.jar Scope: test
[DEBUG] Adding to surefire test classpath: /Users/aaron/.m2/repository/org/apache/maven/surefire/surefire-api/2.7.1/surefire-api-2.7.1.jar Scope: test
[DEBUG] Test Classpath :
[DEBUG]   /Users/aaron/Programs/my_program/target/test-classes
[DEBUG]   /Users/aaron/Programs/my_program/target/classes
[DEBUG]   /Users/aaron/.m2/repository/junit/junit/4.8.1/junit-4.8.1.jar
[DEBUG] Using manager EnhancedLocalRepositoryManager with priority 10 for /Users/aaron/.m2/repository
[DEBUG] dummy:dummy:jar:1.0 (selected for null)
[DEBUG]   org.apache.maven.surefire:surefire-booter:jar:2.7.1:compile (selected for compile)
[DEBUG]     org.apache.maven.surefire:surefire-api:jar:2.7.1:compile (selected for compile)
[DEBUG] Adding to surefire booter test classpath: /Users/aaron/.m2/repository/org/apache/maven/surefire/surefire-booter/2.7.1/surefire-booter-2.7.1.jar Scope: compile
[DEBUG] Adding to surefire booter test classpath: /Users/aaron/.m2/repository/org/apache/maven/surefire/surefire-api/2.7.1/surefire-api-2.7.1.jar Scope: compile
Forking command line: /bin/sh -c cd /Users/aaron/Programs/my_program && /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java -jar /Users/aaron/Programs/my_program/target/surefire/surefirebooter6118081963679415631.jar /Users/aaron/Programs/my_program/target/surefire/surefire4887918564882595612tmp /Users/aaron/Programs/my_program/target/surefire/surefire9012255138269731406tmp

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
There are no tests to run.

Results :

Tests run: 0, Failures: 0, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.089s
[INFO] Finished at: Mon May 30 12:03:09 EDT 2011
[INFO] Final Memory: 7M/62M
[INFO] ------------------------------------------------------------------------

Réponses:


668

Par défaut, Maven utilise les conventions de dénomination suivantes lors de la recherche de tests à exécuter:

Si votre classe de test ne respecte pas ces conventions, vous devez la renommer ou configurer le plug-in Maven Surefire pour utiliser un autre modèle pour les classes de test.


4
Je trouve plus attrayant de changer la configuration de maven. Cette convention de dénomination présente un certain danger pour les utilisateurs inexpérimentés. Nommer vos testcases comme SomethingTest1, SomethingTest2 ferait en sorte que les tests ne soient pas exécutés en silence. Maven ne peut pas le faire pour des raisons de compatibilité descendante, mais il semble plus logique de rechercher des cas de test dans tous les fichiers.
Tobias Kremer

8
Je n'ai jamais su cela - il y avait deux cas qui se terminaient par "Tests", et maven a refusé de les exécuter ... changé en "Test", et tout va bien dans la guilde des sucettes. Merci.
demaniak

2
@Tobias Je suis d'accord avec votre point sur le danger imposé par la convention de dénomination. Cela rompt également le modèle impliqué par l'utilisation d'annotations. Un résultat implicite de l'utilisation des annotations est que les classes / méthodes ayant une annotation spécifique peuvent être recherchées. J'aurais espéré que Maven n'a pas mis en place la restriction de convention de dénomination et s'est plutôt appuyé uniquement sur l'analyse des méthodes annotées @Test dans n'importe quelle classe.
Angad

2
Notez que la documentation infaillible prétend maintenant qu'il **/*Tests.javas'agit d'une inclusion par défaut!
Gareth

11
Question: Alors pourquoi annoter avec @test si vous devez quand même suivre la convention Test *?
dynex

88

J'ai également constaté que le code de test unitaire devrait être placé dans le dossier de test, il ne peut pas être reconnu comme classe de test si vous le mettez dans le dossier principal. par exemple.

Faux

/my_program/src/main/java/NotTest.java

Droite

/my_program/src/test/java/MyTest.java

3
Je vous remercie! Cela et la définition de la portée de test ( <scope>test<scope>) dans le pom.xmlfichier l'ont fait pour moi.
dinesharjani

Je suis tombé sur cela, faites attention aux tests vs test. Le bon test est
Bruck Wubete

72

Une autre chose qui peut empêcher Maven de trouver les tests si si l'emballage du module n'est pas déclaré correctement.

Dans un cas récent, quelqu'un l'avait fait <packaging>pom</packaging>et mes tests n'ont jamais fonctionné. Je l'ai changé <packaging>jar</packaging>et maintenant ça fonctionne bien.


4
Excellente suggestion! Démontre les dangers du «copier-coller» lors de la division d'un artefact Maven à un seul module en plusieurs.
morsor

4
Je souhaite que maven ait imprimé un message - package type is pom - so not running tests- pour donner un indice aux développeurs :(
Arun Avanathan

60

MISE À JOUR:

Comme @scottyseus l'a dit dans les commentaires, à partir de Maven Surefire 2.22.0, ce qui suit est suffisant:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.22.1</version>
</plugin>

Lors de l'utilisation de JUnit 5, j'ai rencontré le même problème. Maven Surefire a besoin d'un plugin pour exécuter les tests JUnit 5. Ajoutez ceci à notre pom.xml:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.21.0</version>
    <dependencies>
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-surefire-provider</artifactId>
            <version>1.2.0-M1</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.2.0-M1</version>
        </dependency>
    </dependencies>
</plugin>

Source: https://junit.org/junit5/docs/current/user-guide/#running-tests-build-maven


Je reçois un "introuvable" pour junit-platform-surefire-provider.
Arya Pourtabatabaie

2
Notez qu'avec Surefire 2.22, il ne devrait pas être nécessaire d'ajouter des dépendances sur le surefire-providerou les jupiter-engineartefacts. Mes tests semblent bien fonctionner sans eux, au moins. voir cette réponse .
scottysseus

Il convient également de noter que vous devez utiliser org.junit.jupiter.api.Testplutôt que d' org.junit.Testutiliser ce plugin ou les tests ne seront pas trouvés.
austin_ce

30

Vérifiez également si votre répertoire de classes de test (par exemple src / test / java) correspond au répertoire répertorié dans la propriété <testSourceDirectory>dans votre pom.xml sous la <build>propriété. Ça m'a pris du temps pour trouver ça.


13

Maven n'exécutera pas vos tests si le projet a <packaging>pom</packaging>

Vous devez définir l'emballage sur jar (ou sur un autre type d'artefact java) pour que les tests s'exécutent: <packaging>jar</packaging>


12

Dans mon cas, il ajoutait le moteur junit-vintage qui le rend compatible avec l'ancienne version des tests JUnit et peut les exécuter. Comme j'utilise JUnit 5.

<dependency>
        <groupId>org.junit.vintage</groupId>
        <artifactId>junit-vintage-engine</artifactId>
        <scope>test</scope>
</dependency>

Je pense que SpringBoot inclut uniquement ce qu'il utilise. Il est logique que vous deviez spécifier vos dépendances en fonction de vos besoins. Sinon, vous importerez tout un tas de bibliothèques que vous n'utilisez pas.
Duc Tran

12

Beaucoup de ces réponses m'ont été très utiles dans le passé, mais je voudrais ajouter un scénario supplémentaire qui m'a coûté un certain temps, car il pourrait en aider d'autres à l'avenir:

Assurez-vous que les classes et méthodes de test sont publiques.

Mon problème était que j'utilisais une fonction de génération automatique de classes / méthodes de test de mon IDE (IntelliJ) et pour une raison quelconque, il les a créées en tant que package-privé. Je trouve que c'est plus facile à manquer que ce à quoi on pourrait s'attendre.


1
C'est aussi le problème que j'ai eu, pour une raison quelconque, IntelliJ crée des tests en tant que package-private et Maven ne peut pas les voir. Changer la classe et la méthode @Test en public fait maven exécuter les tests.
AlexC

Résolu mon problème! Notez que cela ne s'applique pas à JUnit 5+. Je suppose que le générateur de code d'IntelliJ suppose que vous utilisez la dernière version.
lamino

@lamino J'utilisais junit5 et il échouait parce que ma méthode de test n'était pas publique
SudhirKumar

Un peu effronté d'IntelliJ pour me dire que les méthodes peuvent être privées par paquet ..
Wecherowski

9

Vérifiez que (pour jUnit - 4.12 et le plugin Eclipse surefire)

  1. Ajoutez la version jUnit requise dans POM.xml dans les dépendances. Faites Maven -> Mettre à jour le projet pour voir les pots requis exportés dans le projet.
  2. La classe de test se trouve dans le dossier src / test / java et les sous-répertoires de ce dossier (ou le dossier de base peut être spécifié dans POM dans config testSourceDirectory). Le nom de la classe doit avoir le mot «test».
  3. La méthode de test dans la classe de test doit avoir l'annotation @Test

1
Il s'agit davantage d'un problème de configuration Java, mais en plus de nommer correctement la classe de test et de placer le fichier de test dans le répertoire de test sous src, le nom de package de la classe de test doit correspondre au nom de package de la classe que vous testez.
Paul

2
@Paul False - Maven exécutera toutes les classes correspondant à la convention ci-dessoussrc/test/java . La convention de package est pour la structure et pour permettre aux tests d'accéder aux méthodes de package privé.
Michael K


6

Je lutte avec ce problème. Dans mon cas, je n'importais pas la bonne annotation @Test .

1) Vérifiez si le @Test provient de org.junit.jupiter.api.Test (si vous utilisez Junit 5).

2) Avec Junit5 au lieu de @RunWith(SpringRunner.class), utilisez@ExtendWith(SpringExtension.class)

import org.junit.jupiter.api.Test;

@ExtendWith(SpringExtension.class)
@SpringBootTest
@AutoConfigureMockMvc
@TestPropertySource(locations = "classpath:application.properties")    
public class CotacaoTest {
    @Test
    public void testXXX() {

    }
}

4

Si vous avez une application Java / Groovy partagée et que vous n'avez que des tests unitaires Groovy, alors Maven ne trouvera aucun test. Cela peut être corrigé en ajoutant un test unitaire sous src / test / java.


4

J'ai également eu un problème similaire, après avoir découvert que la dépendance testng était à l'origine de ce problème. Après avoir supprimé la dépendance testng de pom (car je n'en ai plus besoin), cela a commencé à bien fonctionner pour moi.

    <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>6.8</version>
        <scope>test</scope>
    </dependency>

4

Si vous avez créé une Spring Bootapplication à l'aide de Spring Initializr , les tests s'exécutent parfaitement depuis Intellij Idea. Mais, si vous essayez d'exécuter des tests à partir d'une ligne de commande:

mvn clean test

Vous pourriez avoir été surpris qu'aucun test n'ait été exécuté. J'ai essayé d'ajouter surefire pluginsans chance. La réponse était simple: pom.xmlcontenait la dépendance suivante:

     <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
           <exclusion>
              <groupId>org.junit.vintage</groupId>
              <artifactId>junit-vintage-engine</artifactId>
           </exclusion>
        </exclusions>
     </dependency>

L'exclusion,, junit-vintage-engineest dédiée au maintien de la compatibilité descendante avec JUnit 4.x. Par conséquent, les nouvelles versions de Spring Boot Initializr ne le prennent pas en charge par défaut. Après avoir supprimé l'exclusion, j'ai Mavencommencé à voir les tests du projet.


3

Si votre nom de classe de test ne suit pas la convention de dénomination standard (comme souligné par @axtavt ci-dessus), vous devez ajouter le nom de modèle / classe dans le pom.xmlafin de Maven choisir le test -

...
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <includes>
                    <include>**/*_UT.java</include>
                </includes>
            </configuration>
        </plugin>
    </plugins>
</build> 
...

2
/my_program/src/test/java/ClassUnderTestTests.java

devrait être

/my_program/src/test/java/ClassUnderTestTest.java

Le Maven trouve ces extrémités Test ou démarre avec Test pour s'exécuter automatiquement.

Cependant, vous pouvez utiliser

mvn surefire:test -Dtest=ClassUnderTestTests.java 

pour exécuter vos tests.


2

Voici le code exact que j'ai dû ajouter à mon pom.xml:

    <build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.21.0</version>
            <dependencies>
                <dependency>
                    <groupId>org.junit.platform</groupId>
                    <artifactId>junit-platform-surefire-provider</artifactId>
                    <version>1.2.0-M1</version>
                </dependency>
                <dependency>
                    <groupId>org.junit.jupiter</groupId>
                    <artifactId>junit-jupiter-engine</artifactId>
                    <version>5.2.0</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

Et voici mes dépendances:

    <dependencies>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>5.2.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.easytesting</groupId>
        <artifactId>fest-assert-core</artifactId>
        <version>2.0M10</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.platform</groupId>
        <artifactId>junit-platform-surefire-provider</artifactId>
        <version>1.2.0-M1</version>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>5.2.0-M1</version>
    </dependency>
</dependencies>

2

J'ai rencontré le même problème, il a résolu le changement ci-dessous dans pom.xml:

<build>
    <testSourceDirectory>test</testSourceDirectory>

...

changé en:

<build>
    <testSourceDirectory>${project.basedir}/src/test/java</testSourceDirectory>

1

Une autre raison de ne pas exécuter les cas de test m'est arrivée - j'avais une propriété nommée "test" à des fins complètement différentes, mais elle interférait avec le plugin infaillible. Ainsi, veuillez vérifier vos POM pour:

<properties>
  <test>.... </test>
  ...
</properties>

et retirez-le.


1

Un autre conseil (en plus des réponses précédentes):

Dans Eclipse, accédez aux propriétés de votre projet> cliquez sur Run/Debug Settings:

"Cette page vous permet de gérer les configurations de lancement avec la ressource actuellement sélectionnée"

Vous pouvez y ajouter (Nouveau ...) ou supprimer (Supprimer) tous les tests JU (JUnit) que vous avez dans votre projet (sous le src/test/javadossier ou le cours).


1

Si vous avez écrit vos tests dans JUnit 4 et ajouté des dépendances JUnit 5 au plugin surefire, vos tests ne s'exécuteront pas.

Dans ce cas, il suffit de commenter les dépendances JUnit 5 du plugin surefire:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.19.1</version>
            <!--<dependencies>-->
                <!--<dependency>-->
                    <!--<groupId>org.junit.platform</groupId>-->
                    <!--<artifactId>junit-platform-surefire-provider</artifactId>-->
                    <!--<version>1.0.0</version>-->
                <!--</dependency>-->
                <!--<dependency>-->
                    <!--<groupId>org.junit.jupiter</groupId>-->
                    <!--<artifactId>junit-jupiter-engine</artifactId>-->
                    <!--<version>${junit.version}</version>-->
                <!--</dependency>-->
            <!--</dependencies>-->
        </plugin>

1

La suite a très bien fonctionné pour moi dans Junit 5

https://junit.org/junit5/docs/current/user-guide/#running-tests-build-maven

<build>
    <plugins>
        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.22.0</version>
        </plugin>
        <plugin>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>2.22.0</version>
        </plugin>
    </plugins>
</build>
<!-- ... -->
<dependencies>
    <!-- ... -->
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>5.4.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>5.4.0</version>
        <scope>test</scope>
    </dependency>
    <!-- ... -->
</dependencies>
<!-- ... -->

1

Dans mon cas, nous migrons une application multimodule vers Spring Boot. Malheureusement, maven n'a plus exécuté tous les tests dans les modules. La dénomination des classes de test n'a pas changé, nous suivons les conventions de dénomination.

À la fin, cela a aidé, lorsque j'ai ajouté la dépendance surefire-junit47au plugin maven-surefire-plugin. Mais je ne pouvais pas expliquer pourquoi, c'était des essais et des erreurs:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<dependencies>
  <dependency>
    <groupId>org.apache.maven.surefire</groupId>
    <artifactId>surefire-junit47</artifactId>
    <version>${maven-surefire-plugin.version}</version>
  </dependency>
</dependencies>


1

J'exécutais des cas de test Junit-5 avec maven 3.6.2 et il montrait toujours Test run: 0

[

INFO] 
[INFO] Results:
[INFO] 
[INFO] Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  8.547 s
[INFO] Finished at: 2019-12-22T00:03:37-08:00
[INFO] ------------------------------------------------------------------------

Les tests Junt-5 ne fonctionnent pas sous maven link ont sauvé ma journée.


0

junitArtifactNamepourrait également être le cas si la JUnit utilisée n'est pas la norme ( junit:junit) mais par exemple ...

<dependency>
    <groupId>org.eclipse.orbit</groupId>
    <artifactId>org.junit</artifactId>
    <version>4.11.0</version>
    <type>bundle</type>
    <scope>test</scope>
</dependency>

0

Au cas où quelqu'un aurait cherché et que je ne le résoudrais pas, j'avais une bibliothèque pour différents tests:

<dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>${org.junit.jupiter.version}</version>
        <scope>test</scope>
    </dependency>

Lorsque j'ai installé junit, tout a fonctionné, j'espère et aide ceci:

<dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>

0

j'ai utilisé en utilisant ce code

<sourceDirectory>src_controller</sourceDirectory>
  <testSourceDirectory>src_test</testSourceDirectory>

à mon pom.xml, assurez-vous simplement que le fichier testng en particulier là-bas

<suiteXmlFile>/Users/mac/xxx/xxx/xx.xxxx.xx/xxx.restassured.xx/testng.xml</suiteXmlFile>

0

Un tel problème peut se produire lorsque vous utilisez le plug-in surfire 3.x.x + avec JUnit5 et que vous annotez par erreur la classe de test avec @Test annotation de JUnit4.

Utilisez: org.junit.jupiter.api.Test(JUnit5) au lieu deorg.junit.Test (Junit4)

REMARQUE: cela peut être difficile à remarquer car l'EDI peut exécuter ce problème sans problème, tout comme le test JUnit4.


0

Un autre problème facilement ignoré - Assurez-vous que le fichier de votre classe a l'extension .java

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.