Maven ne trouve pas de tests JUnit à exécuter

j'ai un programme maven, il compile fine. Quand j'exécute mvn test il n'exécute aucun test (sous l'en-tête des TESTs dit There are no tests to run. ).

j'ai recréé ce problème avec une configuration très simple que je vais inclure ci-dessous, ainsi que la sortie lorsque exécuté avec -X .

les tests de l'unité s'exécutent très bien à partir d'eclipse (à la fois avec son paquet junit par défaut et quand j'inclus à la place le junit.jar téléchargé par maven). Aussi mvn test-compile crée correctement la classe dans les classes d'essai. J'exécute ceci 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;
    }

}

Classundertestts.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 de l'essai 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: [email protected]]
[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 = [email protected]
[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] ------------------------------------------------------------------------
311
demandé sur Michael Currie 2011-05-30 20:20:33
la source

17 ответов

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
répondu axtavt 2016-06-21 00:23:29
la source

j'ai aussi trouvé que le code de test unitaire devrait mettre sous le dossier de test, il ne peut pas être reconnu comme classe de test si vous le mettez sous le dossier principal. par exemple.

Mauvais

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

Droit

/my_program/src/test/java/MyTest.java
63
répondu Robin Ma 2015-11-19 17:15:45
la source

autre chose qui peut amener Maven à ne pas trouver les épreuves 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 ça marche très bien.

49
répondu Jon 2015-10-28 01:47:44
la source

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

23
répondu t3rmin41 2014-11-02 11:46:23
la source

en utilisant JUnit 5, j'ai rencontré le même problème. Maven Surefire a besoin d'un plugin pour exécuter les tests de 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
répondu teyzer 2018-04-17 17:58:03
la source

vérifier que (pour jUnit - 4.12 et Eclipse surefire plugin)

  1. ajouter la version jUnit requise dans POM.xml dans les dépendances. Do Maven - > mettre à jour le projet pour voir les pots requis exportés dans le projet.
  2. la classe de Test est sous 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. Méthode dans la classe d'essai doit avoir l'annotation @Test
9
répondu Mitra 2015-01-06 11:22:50
la source

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

8
répondu user1016765 2015-10-28 13:52:40
la source

Maven ne fera pas vos tests si le projet a <packaging>pom</packaging>

vous devez régler l'emballage à jar (ou un autre type d'artéfact java) pour les tests à exécuter: <packaging>jar</packaging>

7
répondu robjwilkins 2017-02-28 12:45:55
la source

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

4
répondu bruce szalwinski 2014-03-13 21:19:39
la source

j'ai également eu un problème similaire, après avoir exploré a constaté que la dépendance de testng est à l'origine de ce problème. Après avoir enlevé la dépendance de testng de pom (puisque je n'en ai plus besoin), elle a commencé à fonctionner correctement pour moi.

    <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>6.8</version>
        <scope>test</scope>
    </dependency>
2
répondu rajesh madhavan 2017-08-10 18:37:46
la source
/my_program/src/test/java/ClassUnderTestTests.java

devrait être

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

le Maven trouve ces fins de Test ou commence par le Test pour fonctionner automatiquement.

cependant, vous pouvez utiliser

mvn surefire:test -Dtest=ClassUnderTestTests.java 

pour faire vos tests.

2
répondu Boris Z. 2018-02-23 11:49:14
la source

une autre raison pour ne pas exécuter les cas de test m'est arrivée - j'avais une propriété appelée" test " pour des buts complètement différents, mais elle interférait avec le plugin surefire. Ainsi, s'il vous plaît vérifier vos POMs pour:

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

et enlevez-le.

1
répondu Rusi Popov 2017-09-02 20:24:58
la source

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

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

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

là, vous pouvez ajouter de Nouvelles...) ou supprimer (supprimer) tous les tests JU (JUnit) que vous avez dans votre projet (sous le dossier src/test/java , ou cours).

1
répondu datv 2018-05-03 13:39:34
la source

junitArtifactName pourrait aussi être le cas si le JUnit utilisé 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
répondu Tuomas Kiviaho 2017-04-14 12:27:22
la source

dans le cas où quelqu'un a cherché et je ne résous pas, j'ai eu 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 aider ceci:

<dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>
0
répondu Hizmarck 2018-03-20 08:22:48
la source

si votre nom de classe de test ne suit pas la convention de nommage standard (comme souligné 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
répondu Saikat 2018-04-17 21:26:15
la source

voici le code exact que j'ai dû ajouter à ma 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
répondu anon58192932 2018-08-15 07:02:04
la source

Autres questions sur