Mam program maven, kompiluje się dobrze. Po uruchomieniu mvn test
nie uruchamia żadnych testów (pod nagłówkiem TESTY mówi There are no tests to run.
).
Odtworzyłem ten problem z super prostą konfiguracją, którą przedstawię poniżej, a także dane wyjściowe po uruchomieniu -X
.
Testy jednostkowe działają poprawnie w środowisku eclipse (zarówno z domyślnym pakietem junit, jak i wtedy, gdy dołączam plik junit.jar pobrany przez maven). Również mvn test-compile
poprawnie tworzy klasę w klasach testowych. Używam tego na OSX 10.6.7 z Maven 3.0.2 i java 1.6.0_24.
Oto struktura katalogów:
/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));
}
}
Koniec testu 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] ------------------------------------------------------------------------
**/*Tests.java
jest to domyślna opcja!Odkryłem również, że kod testu jednostkowego powinien być umieszczony w folderze testowym, nie można go rozpoznać jako klasy testowej, jeśli umieścisz go w folderze głównym. na przykład.
Źle
Dobrze
źródło
<scope>test<scope>
) wpom.xml
pliku zrobiło to dla mnie.Kolejna rzecz, która może spowodować, że Maven nie znajdzie testów, jeśli opakowanie modułu nie zostanie poprawnie zadeklarowane.
W ostatnim przypadku ktoś miał
<packaging>pom</packaging>
i moje testy nigdy się nie uruchomiły. Zmieniłem to na<packaging>jar</packaging>
i teraz działa dobrze.źródło
package type is pom - so not running tests
- aby dać wskazówki programistom :(AKTUALIZACJA:
Jak napisano w komentarzach @scottyseus, począwszy od Maven Surefire 2.22.0, wystarczy:
Podczas korzystania z JUnit 5 napotkałem ten sam problem. Maven Surefire potrzebuje wtyczki do uruchomienia testów JUnit 5. Dodaj to do naszego
pom.xml
:Źródło: https://junit.org/junit5/docs/current/user-guide/#running-tests-build-maven
źródło
junit-platform-surefire-provider
.surefire-provider
lubjupiter-engine
. Wydaje mi się, że moje testy przebiegają bez nich przynajmniej dobrze. zobacz tę odpowiedź .org.junit.jupiter.api.Test
zamiastorg.junit.Test
podczas korzystania z tej wtyczki, w przeciwnym razie testy nie zostaną znalezione.Sprawdź również, czy katalog klas testów (np. Src / test / java) odpowiada katalogowi wymienionemu we właściwości
<testSourceDirectory>
w pliku pom.xml w ramach<build>
właściwości. Zajęło mi to trochę czasu, aby to znaleźć.źródło
Maven nie uruchomi testów, jeśli projekt je posiada
<packaging>pom</packaging>
Aby testy zostały uruchomione, należy ustawić opakowanie na jar (lub inny typ artefaktu Java):
<packaging>jar</packaging>
źródło
W moim przypadku dodałem silnik junit-vintage, który czyni go kompatybilnym ze starszymi wersjami testów JUnit i może je uruchamiać. Gdy używam JUnit 5.
źródło
Wiele z tych odpowiedzi było dla mnie bardzo przydatnych w przeszłości, ale chciałbym dodać dodatkowy scenariusz, który kosztował mnie trochę czasu, ponieważ może pomóc innym w przyszłości:
Upewnij się, że klasy testowe i metody są publiczne.
Mój problem polegał na tym, że korzystałem z funkcji automatycznego generowania klas / metod testowych w moim IDE (IntelliJ) iz jakiegoś powodu stworzyłem je jako prywatne dla pakietu. Łatwiej mi to przegapić, niż można by się spodziewać.
źródło
Sprawdź to (dla jUnit - 4.12 i wtyczki surefire Eclipse)
źródło
src/test/java
. Konwencja pakietów dotyczy struktury i umożliwia testom dostęp do metod prywatnych.Odkryty, jeśli poprzedzisz test słowem „Streszczenie”, zostanie on również domyślnie zignorowany.
źródło
*/TestAbstractSomeClassName.java
.Walczę z tym problemem. W moim przypadku nie importowałem właściwej adnotacji @Test .
1) Sprawdź, czy @Test pochodzi z org.junit.jupiter.api.Test (jeśli używasz Junit 5).
2) Z Junit5 zamiast
@RunWith(SpringRunner.class)
, użyj@ExtendWith(SpringExtension.class)
źródło
Jeśli masz udostępnioną aplikację Java / Groovy i wszystko, co masz, to testy jednostkowe Groovy, Maven nie znajdzie żadnych testów. Można to naprawić, dodając jeden test jednostkowy w src / test / java.
źródło
Miałem również podobny problem, po zbadaniu odkryłem, że przyczyną tego problemu jest zależność testowania. Po usunięciu zależności testng z pom (ponieważ już jej nie potrzebuję), zaczęła działać dobrze dla mnie.
źródło
Jeśli utworzyłeś
Spring Boot
aplikację za pomocą Spring Initializr , testy są uruchamiane poprawnie z Intellij Idea. Ale jeśli spróbujesz uruchomić testy z wiersza polecenia:Możesz być zaskoczony, że nie przeprowadzono żadnych testów. Próbowałem dodać
surefire plugin
bez powodzenia. Odpowiedź była prosta:pom.xml
zawierała następującą zależność:Wykluczenie
junit-vintage-engine
służy do zachowania zgodności z poprzednimi wersjamiJUnit 4.x
. Nowe wersje Spring Boot Initializr nie obsługują go domyślnie. Po usunięciu wykluczeniaMaven
zacząłem oglądać testy projektu.źródło
Jeśli nazwa klasy testowej nie jest zgodna ze standardową konwencją nazewnictwa (podkreśloną przez @axtavt powyżej), musisz dodać wzorzec / nazwę klasy
pom.xml
, aby Maven mógł wybrać test -źródło
Powinien być
Maven znajduje te końce testu lub rozpoczyna się od testu, aby uruchomić się automatycznie.
Możesz jednak użyć
przeprowadzić testy.
źródło
Oto dokładny kod, który musiałem dodać do mojego pom.xml:
A oto moje zależności:
źródło
Napotkałem ten sam problem, został rozwiązany przez poniższą zmianę w pom.xml:
...
zmienić na:
źródło
Kolejny powód, dla którego nie uruchomiłem przypadków testowych, przydarzył mi się - miałem właściwość o nazwie „test” do zupełnie innych celów, ale przeszkadzało to we wtyczce surefire. Dlatego sprawdź swoje POM-y pod kątem:
i usuń to.
źródło
Jeszcze jedna wskazówka (oprócz poprzednich odpowiedzi):
W Eclipse przejdź do Właściwości projektu> kliknij
Run/Debug Settings
:Tam możesz dodać (Nowy ...) lub usunąć (Usuń) testy JU (JUnit), które masz w swoim projekcie (w
src/test/java
folderze lub kursie).źródło
Jeśli napisałeś swoje testy w JUnit 4 i dodałeś zależności JUnit 5 do wtyczki surefire, twoje testy się nie uruchomią.
W takim przypadku po prostu skomentuj zależności JUnit 5 od wtyczki surefire:
źródło
Poniższe działało dobrze dla mnie w Junit 5
https://junit.org/junit5/docs/current/user-guide/#running-tests-build-maven
źródło
W moim przypadku jesteśmy aplikacją do migracji na wiele modułów do Spring Boot. Niestety maven nie wykonał już wszystkich testów w modułach. Nazwy klas testowych nie uległy zmianie, przestrzegamy konwencji nazewnictwa.
Na koniec pomogło, kiedy dodałem zależność
surefire-junit47
do wtyczkimaven-surefire-plugin
. Ale nie mogłem wyjaśnić, dlaczego to była próba i błąd:źródło
Korzystałem z testów testowych Junit-5 z maven 3.6.2 i zawsze pokazywałem Uruchomienie testowe: 0
[
Testy Junt-5 nie działają pod linkiem maven, który uratował mi dzień.
źródło
junitArtifactName
może być tak również w przypadku, gdy używany JUnit nie jest standardem (junit:junit
), ale na przykład ...źródło
W przypadku, gdy ktoś szukał i nie udało mi się go rozwiązać, miałem bibliotekę do różnych testów:
Kiedy zainstalowałem junit wszystko działało, mam nadzieję i pomogę w tym:
źródło
użyłem tego kodu
do mojego pom.xml, po prostu upewnij się, że tam jest plik testng
źródło
Taki problem może wystąpić, gdy używasz wtyczki surfire 3.x.x + z JUnit5 i przez pomyłkę adnotuj klasę testową za pomocą
@Test
adnotacją z JUnit4.Użyj:
org.junit.jupiter.api.Test
(JUnit5) zamiastorg.junit.Test
(Junit4)UWAGA: może to być trudne do zauważenia, ponieważ IDE może uruchamiać te problemy bez testowania JUnit4.
źródło
Kolejny łatwo przeoczony problem - upewnij się, że plik twojej klasy ma rozszerzenie .java
źródło