Ich habe ein Maven-Programm, es kompiliert gut. Wenn ich mvn test
es 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-compile
die 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] ------------------------------------------------------------------------
**/*Tests.java
ein Standard-Include ist!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
Recht
quelle
<scope>test<scope>
) in derpom.xml
Datei haben es für mich getan.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.quelle
package type is pom - so not running tests
- um den Entwicklern einen Hinweis zu geben :(AKTUALISIEREN:
Wie @scottyseus in den Kommentaren sagte, ist ab Maven Surefire 2.22.0 Folgendes ausreichend:
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
:Quelle: https://junit.org/junit5/docs/current/user-guide/#running-tests-build-maven
quelle
junit-platform-surefire-provider
.surefire-provider
oderjupiter-engine
Artefakten hinzuzufügen . Meine Tests scheinen zumindest ohne sie gut zu laufen. siehe diese Antwort .org.junit.jupiter.api.Test
anstelle derorg.junit.Test
Verwendung dieses Plugins verwenden müssen, da sonst die Tests nicht gefunden werden.Ü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.quelle
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>
quelle
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.
quelle
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.
quelle
Überprüfen Sie dies (für jUnit - 4.12 und Eclipse Surefire Plugin)
quelle
src/test/java
. Die Paketkonvention dient der Strukturierung und ermöglicht Tests den Zugriff auf paketprivate Methoden.Wenn Sie einem Test das Präfix "Abstract" voranstellen, wird er standardmäßig ebenfalls ignoriert.
quelle
*/TestAbstractSomeClassName.java
.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)
quelle
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.
quelle
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.
quelle
Wenn Sie eine
Spring Boot
Anwendung mit Spring Initializr erstellt haben , werden Tests ordnungsgemäß von Intellij Idea ausgeführt. Wenn Sie jedoch versuchen, Tests über eine Befehlszeile auszuführen:Sie könnten überrascht gewesen sein, dass überhaupt keine Tests durchgeführt wurden. Ich versuchte
surefire plugin
ohne Glück hinzuzufügen . Die Antwort war einfach:pom.xml
enthielt die folgende Abhängigkeit:Der Ausschluss
junit-vintage-engine
dient der Wahrung der Abwärtskompatibilität mitJUnit 4.x
. Neue Versionen von Spring Boot Initializr unterstützen dies daher standardmäßig nicht. Nachdem ich den Ausschluss entfernt hatte, wurdenMaven
die Tests des Projekts angezeigt.quelle
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.quelle
sollte sein
Der Maven findet diese Endtests oder beginnt mit Test, um automatisch ausgeführt zu werden.
Sie können jedoch verwenden
um Ihre Tests durchzuführen.
quelle
Hier ist der genaue Code, den ich meiner pom.xml hinzufügen musste:
Und hier sind meine Abhängigkeiten:
quelle
Ich hatte das gleiche Problem, das durch die folgende Änderung in pom.xml behoben wurde:
...
gewechselt zu:
quelle
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:
und entfernen Sie es.
quelle
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
:Dort können Sie alle JU (JUnit) -Tests, die Sie in Ihrem Projekt haben (unter dem
src/test/java
Ordner oder Kurs), hinzufügen (Neu ...) oder entfernen (Löschen ).quelle
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:
quelle
Das Folgende hat in Junit 5 für mich gut funktioniert
https://junit.org/junit5/docs/current/user-guide/#running-tests-build-maven
quelle
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-junit47
zum Plugin hinzugefügt habemaven-surefire-plugin
. Aber ich konnte nicht erklären, warum, es war Versuch und Irrtum:quelle
Ich habe Junit-5-Testfälle mit Maven 3.6.2 ausgeführt und es wurde immer Testlauf: 0 angezeigt
[
Junt-5-Tests werden nicht unter Maven Link ausgeführt, der meinen Tag gerettet hat.
quelle
junitArtifactName
Dies kann auch der Fall sein, wenn die verwendete JUnit nicht der Standard (junit:junit
) ist, aber zum Beispiel ...quelle
Falls jemand gesucht hat und ich es nicht löse, hatte ich eine Bibliothek für verschiedene Tests:
Als ich junit installiert habe, hat alles funktioniert, ich hoffe und helfe dabei:
quelle
Ich habe diesen Code verwendet
Stellen Sie in meiner pom.xml einfach sicher, dass die Testng-Datei dort spezifisch ist
quelle
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.
quelle
Ein weiteres leicht zu übersehendes Problem: Stellen Sie sicher, dass die Datei Ihrer Klasse die Erweiterung .java hat
quelle