Maven findet keine JUnit-Tests zum Ausführen

415

Ich habe ein Maven-Programm, es kompiliert gut. Wenn ich mvn testes ausführe, werden keine Tests ausgeführt (unter TESTs Header stehtThere are no tests to run. ).

Ich habe dieses Problem mit einem supereinfachen Setup neu erstellt, das ich unten sowie die Ausgabe beim Ausführen mit einschließen werde -X.

Die Unit-Tests laufen einwandfrei mit Eclipse (sowohl mit dem Standard-Junit-Paket als auch wenn ich stattdessen die von maven heruntergeladene Datei junit.jar einbeziehe). Außerdem erstellt mvn test-compiledie Klasse unter Testklassen korrekt. Ich führe dies unter OSX 10.6.7 mit Maven 3.0.2 und Java 1.6.0_24 aus.

Hier ist die Verzeichnisstruktur:

/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));
    }
}

Ende des MVN-X-Tests:

[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] ------------------------------------------------------------------------
Zugwalt
quelle

Antworten:

666

Standardmäßig verwendet Maven die folgenden Namenskonventionen, wenn nach Tests zum Ausführen gesucht wird:

Wenn Ihre Testklasse diese Konventionen nicht befolgt, sollten Sie sie umbenennen oder das Maven Surefire Plugin so konfigurieren, dass für Testklassen ein anderes Muster verwendet wird.

axtavt
quelle
4
Ich finde es ansprechender, die Maven-Konfiguration zu ändern. Diese Namenskonvention birgt eine gewisse Gefahr für unerfahrene Benutzer. Wenn Sie Ihre Testfälle wie SomethingTest1 oder SomethingTest2 benennen, werden die Tests stillschweigend nicht ausgeführt. Maven kann dies aus Gründen der Abwärtskompatibilität nicht tun, bietet jedoch mehr Logik für die Suche nach Testfällen in allen Dateien.
Tobias Kremer
8
Ich wusste das nie - hatte zwei Fälle, die mit "Tests" endeten, und Maven weigerte sich, sie auszuführen ... wechselte zu "Test" und alles ist wieder gut in der Lollipop-Gilde. Vielen Dank.
Demaniak
2
@Tobias Ich stimme Ihrem Standpunkt bezüglich der mit der Namenskonvention verbundenen Gefahr zu. Es bricht auch das Muster, das durch die Verwendung von Anmerkungen impliziert wird. Ein implizites Ergebnis der Verwendung von Annotationen ist, dass Klassen / Methoden mit einer bestimmten Annotation durchsucht werden können. Ich hätte gehofft, dass Maven die Einschränkung der Namenskonvention nicht eingeführt hat und sich stattdessen nur auf das Scannen der mit @ Test kommentierten Methoden in einer Klasse verlassen hat.
Angad
2
Beachten Sie, dass die todsichere Dokumentation jetzt behauptet, dass dies **/*Tests.javaein Standard-Include ist!
Gareth
11
Frage: Warum also mit @test kommentieren, wenn Sie die Test * -Konvention trotzdem befolgen müssen?
Dynex
88

Ich fand auch, dass der Unit-Test-Code unter dem Testordner abgelegt werden sollte. Er kann nicht als Testklasse erkannt werden, wenn Sie ihn unter den Hauptordner legen. z.B.

Falsch

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

Recht

/my_program/src/test/java/MyTest.java
Robin Ma
quelle
3
Danke! Dies und das Festlegen des Bereichs für test ( <scope>test<scope>) in der pom.xmlDatei haben es für mich getan.
Dinesharjani
Ich bin darauf gestoßen, achte auf Tests gegen Test. Der richtige ist Test
Bruck Wubete
72

Eine andere Sache, die dazu führen kann, dass Maven die Tests nicht findet, wenn die Verpackung des Moduls nicht korrekt deklariert ist.

In einem aktuellen Fall hatte jemand <packaging>pom</packaging>und meine Tests liefen nie. Ich habe es geändert <packaging>jar</packaging>und jetzt funktioniert es gut.

Jon
quelle
4
Hervorragender Vorschlag! Demonstriert die Gefahren des Kopierens und Einfügens beim Aufteilen eines Maven-Artefakts mit einem Modul in mehrere.
Morsor
4
Ich wünschte, Maven hätte eine Nachricht gedruckt - package type is pom - so not running tests- um den Entwicklern einen Hinweis zu geben :(
Arun Avanathan
60

AKTUALISIEREN:

Wie @scottyseus in den Kommentaren sagte, ist ab Maven Surefire 2.22.0 Folgendes ausreichend:

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

Bei der Verwendung von JUnit 5 stieß ich auf das gleiche Problem. Maven Surefire benötigt ein Plugin, um JUnit 5-Tests auszuführen. Fügen Sie dies zu unserem hinzu 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>

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

teyzer
quelle
Ich bekomme ein "nicht gefunden" für junit-platform-surefire-provider.
Arya Pourtabatabaie
2
Beachten Sie, dass es mit Surefire 2.22 nicht erforderlich sein sollte, Abhängigkeiten von surefire-provideroder jupiter-engineArtefakten hinzuzufügen . Meine Tests scheinen zumindest ohne sie gut zu laufen. siehe diese Antwort .
Scottysseus
Es ist auch erwähnenswert, dass Sie org.junit.jupiter.api.Testanstelle der org.junit.TestVerwendung dieses Plugins verwenden müssen, da sonst die Tests nicht gefunden werden.
austin_ce
30

Überprüfen Sie außerdem, ob Ihr Testklassenverzeichnis (z. B. src / test / java) dem Verzeichnis entspricht, das in der Eigenschaft <testSourceDirectory>in Ihrer Datei pom.xml unter <build>Eigenschaft aufgeführt ist. Ich habe eine Weile gebraucht, um das zu finden.

t3rmin41
quelle
13

Maven wird Ihre Tests nicht ausführen, wenn das Projekt hat <packaging>pom</packaging>

Sie müssen die Verpackung auf jar (oder einen anderen Java-Artefakttyp) einstellen, damit die Tests ausgeführt werden können: <packaging>jar</packaging>

Robjwilkins
quelle
12

In meinem Fall wurde die Junit-Vintage-Engine hinzugefügt, die sie mit älteren Versionen von JUnit-Tests kompatibel macht und sie ausführen kann. Da ich JUnit 5 benutze.

<dependency>
        <groupId>org.junit.vintage</groupId>
        <artifactId>junit-vintage-engine</artifactId>
        <scope>test</scope>
</dependency>
Duc Tran
quelle
Ich denke, SpringBoot enthält nur das, was es verwendet. Es ist sinnvoll, dass Sie Ihre Abhängigkeiten entsprechend Ihren Anforderungen angeben müssen. Andernfalls importieren Sie eine ganze Reihe von Bibliotheken, die Sie nicht verwenden.
Duc Tran
12

Viele dieser Antworten waren für mich in der Vergangenheit sehr nützlich, aber ich möchte ein zusätzliches Szenario hinzufügen, das mich einige Zeit gekostet hat, da es anderen in Zukunft helfen könnte:

Stellen Sie sicher, dass die Testklassen und -methoden öffentlich sind.

Mein Problem war, dass ich eine automatische Testklassen- / Methodengenerierungsfunktion meiner IDE (IntelliJ) verwendete und sie aus irgendeinem Grund als paketprivat erstellte. Ich finde das leichter zu übersehen als man erwarten würde.

João Matos
quelle
1
Dies ist auch das Problem, das ich hatte. Aus irgendeinem Grund erstellt IntelliJ Tests als paketprivat und Maven kann sie nicht sehen. Durch Ändern der Klasse und der @ Test-Methode in einen öffentlich gemachten Maven werden die Tests ausgeführt.
AlexC
Mein Problem gelöst! Beachten Sie, dass dies nicht für JUnit 5+ gilt. Ich denke, der Codegenerator von IntelliJ geht davon aus, dass Sie die neueste Version verwenden.
Lamino
@lamino Ich habe junit5 verwendet und es ist fehlgeschlagen, weil meine Testmethode nicht öffentlich war
SudhirKumar
Ein bisschen frech von IntelliJ, um mir zu sagen, dass die Methoden
paketprivat sein
9

Überprüfen Sie dies (für jUnit - 4.12 und Eclipse Surefire Plugin)

  1. Fügen Sie in Abhängigkeiten die erforderliche jUnit-Version in POM.xml hinzu. Maven ausführen -> Projekt aktualisieren, um die erforderlichen im Projekt exportierten Gläser anzuzeigen.
  2. Die Testklasse befindet sich im Ordner src / test / java und in den Unterverzeichnissen dieses Ordners (oder der Basisordner kann in POM in config testSourceDirectory angegeben werden). Der Name der Klasse sollte das Endwort 'Test' haben.
  3. Die Testmethode in der Testklasse sollte die Anmerkung @Test haben
Mitra
quelle
1
Dies ist eher ein Problem mit der Java-Konfiguration. Zusätzlich zur korrekten Benennung der Testklasse und zum Ablegen der Testdatei im Testverzeichnis unter src muss der Paketname der Testklasse mit dem Paketnamen der zu testenden Klasse übereinstimmen.
Paul
2
@Paul False - Maven führt alle Klassen aus, die der Konvention unter entsprechensrc/test/java . Die Paketkonvention dient der Strukturierung und ermöglicht Tests den Zugriff auf paketprivate Methoden.
Michael K
9

Wenn Sie einem Test das Präfix "Abstract" voranstellen, wird er standardmäßig ebenfalls ignoriert.

user1016765
quelle
1
maven.apache.org/guides/getting-started `` `Und die Standardausschlüsse sind: * / Abstract Test.java * / Abstract TestCase.java` ``
Antoine Meyer
Es scheint auch zu ignorieren */TestAbstractSomeClassName.java.
Collin Krawll
6

Ich kämpfe mit diesem Problem. In meinem Fall habe ich nicht den richtigen @Test importiert Annotation .

1) Überprüfen Sie, ob der @Test von org.junit.jupiter.api.Test stammt (wenn Sie Junit 5 verwenden).

2) Mit Junit5 statt @RunWith(SpringRunner.class), Verwendung@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() {

    }
}
edubriguenti
quelle
4

Wenn Sie eine gemeinsam genutzte Java / Groovy-Anwendung haben und nur Groovy-Komponententests haben, findet Maven keine Tests. Dies kann durch Hinzufügen eines Komponententests unter src / test / java behoben werden.

Bruce Szalwinski
quelle
4

Ich hatte auch ein ähnliches Problem, nachdem ich herausgefunden hatte, dass die Testng-Abhängigkeit dieses Problem verursacht. Nachdem ich die testng-Abhängigkeit von pom entfernt hatte (da ich sie nicht mehr brauche), funktionierte sie für mich einwandfrei.

    <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>6.8</version>
        <scope>test</scope>
    </dependency>
Rajesh Madhavan
quelle
4

Wenn Sie eine Spring BootAnwendung mit Spring Initializr erstellt haben , werden Tests ordnungsgemäß von Intellij Idea ausgeführt. Wenn Sie jedoch versuchen, Tests über eine Befehlszeile auszuführen:

mvn clean test

Sie könnten überrascht gewesen sein, dass überhaupt keine Tests durchgeführt wurden. Ich versuchte surefire pluginohne Glück hinzuzufügen . Die Antwort war einfach: pom.xmlenthielt die folgende Abhängigkeit:

     <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>

Der Ausschluss junit-vintage-enginedient der Wahrung der Abwärtskompatibilität mit JUnit 4.x. Neue Versionen von Spring Boot Initializr unterstützen dies daher standardmäßig nicht. Nachdem ich den Ausschluss entfernt hatte, wurden Mavendie Tests des Projekts angezeigt.

Exterminator13
quelle
3

Wenn Ihr Testklassenname nicht der Standardbenennungskonvention entspricht (wie oben durch @axtavt hervorgehoben), müssen Sie den Muster- / Klassennamen in hinzufügen pom.xml, damit Maven den Test auswählt.

...
<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> 
...
Saikat
quelle
2
/my_program/src/test/java/ClassUnderTestTests.java

sollte sein

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

Der Maven findet diese Endtests oder beginnt mit Test, um automatisch ausgeführt zu werden.

Sie können jedoch verwenden

mvn surefire:test -Dtest=ClassUnderTestTests.java 

um Ihre Tests durchzuführen.

Boris Z.
quelle
2

Hier ist der genaue Code, den ich meiner pom.xml hinzufügen musste:

    <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>

Und hier sind meine Abhängigkeiten:

    <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>
anon58192932
quelle
2

Ich hatte das gleiche Problem, das durch die folgende Änderung in pom.xml behoben wurde:

<build>
    <testSourceDirectory>test</testSourceDirectory>

...

gewechselt zu:

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

Ein weiterer Grund, warum ich die Testfälle nicht ausgeführt habe, ist mir passiert - ich hatte eine Eigenschaft namens "test" für ganz andere Zwecke, die jedoch das todsichere Plugin störte. Überprüfen Sie daher bitte Ihre POMs auf:

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

und entfernen Sie es.

Rusi Popov
quelle
1

Noch ein Tipp (zusätzlich zu den vorherigen Antworten):

Gehen Sie in Eclipse zu den Eigenschaften Ihres Projekts und klicken Sie auf Run/Debug Settings:

"Auf dieser Seite können Sie Startkonfigurationen mit der aktuell ausgewählten Ressource verwalten."

Dort können Sie alle JU (JUnit) -Tests, die Sie in Ihrem Projekt haben (unter dem src/test/javaOrdner oder Kurs), hinzufügen (Neu ...) oder entfernen (Löschen ).

datv
quelle
1

Wenn Sie Ihre Tests in JUnit 4 geschrieben und dem todsicheren Plugin JUnit 5-Abhängigkeiten hinzugefügt haben, werden Ihre Tests nicht ausgeführt.

In diesem Fall kommentieren Sie einfach die JUnit 5-Abhängigkeiten vom todsicheren Plugin:

        <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>
youhans
quelle
1

Das Folgende hat in Junit 5 für mich gut funktioniert

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>
<!-- ... -->
AS Ranjan
quelle
1

In meinem Fall handelt es sich um eine Multimodul-Migrationsanwendung zu Spring Boot. Leider hat maven nicht mehr alle Tests in den Modulen ausgeführt. Die Benennung der Testklassen hat sich nicht geändert, wir folgen den Namenskonventionen.

Am Ende hat es geholfen, als ich die Abhängigkeit surefire-junit47zum Plugin hinzugefügt habe maven-surefire-plugin. Aber ich konnte nicht erklären, warum, es war Versuch und Irrtum:

<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>

Michael Hegner
quelle
1

Ich habe Junit-5-Testfälle mit Maven 3.6.2 ausgeführt und es wurde immer Testlauf: 0 angezeigt

[

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] ------------------------------------------------------------------------

Junt-5-Tests werden nicht unter Maven Link ausgeführt, der meinen Tag gerettet hat.

Vijay Kumar Rajput
quelle
0

junitArtifactNameDies kann auch der Fall sein, wenn die verwendete JUnit nicht der Standard ( junit:junit) ist, aber zum Beispiel ...

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

Falls jemand gesucht hat und ich es nicht löse, hatte ich eine Bibliothek für verschiedene Tests:

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

Als ich junit installiert habe, hat alles funktioniert, ich hoffe und helfe dabei:

<dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>
hizmarck
quelle
0

Ich habe diesen Code verwendet

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

Stellen Sie in meiner pom.xml einfach sicher, dass die Testng-Datei dort spezifisch ist

<suiteXmlFile>/Users/mac/xxx/xxx/xx.xxxx.xx/xxx.restassured.xx/testng.xml</suiteXmlFile>
Prasetyo Budi
quelle
0

Ein solches Problem kann auftreten, wenn Sie das Surfire-Plugin 3.x.x + mit JUnit5 verwenden und versehentlich die Testklasse mit kommentieren @Test Anmerkungen von JUnit4 versehen.

Verwenden Sie: org.junit.jupiter.api.Test(JUnit5) anstelle vonorg.junit.Test (Junit4)

HINWEIS: Dies ist möglicherweise schwer zu bemerken, da die IDE diese Probleme möglicherweise nur beim JUnit4-Test ausführt.

Walkeros
quelle
0

Ein weiteres leicht zu übersehendes Problem: Stellen Sie sicher, dass die Datei Ihrer Klasse die Erweiterung .java hat

Mark W.
quelle