Maven ne trouve pas de tests JUnit à exécuter


J'ai un programme maven, il compile bien. Lorsque je lance mvn test, il 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 je vais inclure ci-dessous ainsi que la sortie lors de l'exécution avec -X.

Les tests unitaires s'exécutent correctement à partir d'eclipse (à la fois avec son package junit par défaut et lorsque j'inclus à la place le junit.jar téléchargé par maven). mvn test-compile crée également correctement la classe sous test-classes. Je suis en cours d'exécution de cette 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] ------------------------------------------------------------------------
Author: Michael Currie, 2011-05-30

17 answers

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

  • Test*
  • *Test
  • *TestCase

Votre classe de test ne suit pas ces conventions. Vous devez le renommer ou configurer Maven Surefire Plugin pour utiliser un autre modèle pour les classes de test.

 543
Author: axtavt, 2016-06-20 21:23:29

J'ai également trouvé 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 placez dans le dossier principal. par exemple.

Mal

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

Droit

/my_program/src/test/java/MyTest.java
 63
Author: Robin Ma, 2015-11-19 14:15:45

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

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

 49
Author: Jon, 2015-10-27 22:47:44

Vérifiez également si le répertoire de vos classes de test (par exemple src/test/java) correspond au répertoire répertorié dans la propriété <testSourceDirectory> de votre pom.xml sous la propriété <build>. M'a fallu un certain temps pour trouver que.

 23
Author: t3rmin41, 2014-11-02 08:46:23

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

 16
Author: teyzer, 2018-04-17 14:58:03

Vérifiez cela (pour JUnit - 4.12 et le plugin Eclipse surefire)

  1. Ajouter la version JUnit requise dans POM.xml dans les dépendances. Do Maven - > Update project pour voir les jars requis exportés dans le projet.
  2. La classe 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 devrait avoir le mot tailng 'Test'.
  3. La méthode de test dans la classe test devrait avoir l'annotation @ Test
 9
Author: Mitra, 2015-01-06 08:22:50

Découvert si vous préfixez un test avec 'Abstract', il sera également ignoré par défaut.

 8
Author: user1016765, 2015-10-28 10:52:40

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

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

 7
Author: robjwilkins, 2017-02-28 09:45:55

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
Author: bruce szalwinski, 2014-03-13 17:19:39

J'ai également eu un problème similaire, après avoir exploré trouvé que la dépendance testng est à 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é à fonctionner correctement pour moi.

    <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>6.8</version>
        <scope>test</scope>
    </dependency>
 2
Author: rajesh madhavan, 2017-08-10 15:37:46
/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 commence par Test pour s'exécuter automatiquement.

Cependant, vous pouvez utiliser

mvn surefire:test -Dtest=ClassUnderTestTests.java 

Pour exécuter vos tests.

 2
Author: Boris Z., 2018-02-23 08:49:14

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 cela interférait avec le plugin surefire. Ainsi, veuillez vérifier vos POMs pour:

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

Et retirez-le.

 1
Author: Rusi Popov, 2017-09-02 17:24:58

Encore un conseil (en plus des réponses précédentes):

Dans Eclipse, allez dans les propriétés de votre projet > cliquez sur Run/Debug Settings:

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

Là-dedans, vous pouvez ajouter (Nouveau...) ou supprimer (Supprimer) tous les tests JU (JUnit) que vous avez dans votre projet (sous le dossier src/test/java, ou le cours).

 1
Author: datv, 2018-05-03 10:39:34

junitArtifactName cela pourrait également être le cas si le JUnit utilisé n'est pas le standard (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
Author: Tuomas Kiviaho, 2017-04-14 09:27:22

Dans le cas où quelqu'un a cherché et que je ne le résous 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>

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

<dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>
 0
Author: Hizmarck, 2018-03-20 05:22:48

Si votre nom de classe de test ne suit pas la convention de nommage standard (comme surligné par @axtavt ci-dessus), vous devez ajouter le nom de modèle/classe dans le pom.xml afin 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> 
...
 0
Author: Saikat, 2018-04-17 18:26:15

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>
 0
Author: anon58192932, 2018-08-15 04:02:04