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

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.


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

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.


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


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.


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>


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>

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.


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

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


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() {

    }
}

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.


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>

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.


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

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.


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>

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>

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.


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


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>

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

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>


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.


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>

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>

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>

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.


0

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.