Saya punya program pakar, itu mengkompilasi dengan baik. Ketika saya menjalankannya mvn test
tidak menjalankan tes apa pun (di bawah judul TEST mengatakanThere are no tests to run.
).
Saya telah menciptakan kembali masalah ini dengan setup super sederhana yang akan saya sertakan di bawah ini serta output ketika dijalankan dengan -X
.
Tes unit berjalan dengan baik dari eclipse (keduanya dengan paket default junit dan ketika saya memasukkan junit.jar yang diunduh oleh maven). Juga mvntest-compile
membuat kelas dengan benar di bawah kelas uji. Saya menjalankan ini pada OSX 10.6.7 dengan Maven 3.0.2 dan java 1.6.0_24.
Berikut adalah struktur direktori:
/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));
}
}
Akhir dari mvn -X test:
[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
itu termasuk default!Saya juga menemukan bahwa kode tes unit harus diletakkan di bawah folder tes, itu tidak dapat dikenali sebagai kelas uji jika Anda meletakkannya di bawah folder utama. misalnya.
Salah
Baik
sumber
<scope>test<scope>
) dalampom.xml
file melakukannya untuk saya.Hal lain yang dapat menyebabkan Maven tidak menemukan tes jika jika kemasan modul tidak dinyatakan dengan benar.
Dalam kasus baru-baru ini, seseorang telah
<packaging>pom</packaging>
dan tes saya tidak pernah berjalan. Saya mengubahnya menjadi<packaging>jar</packaging>
dan sekarang berfungsi dengan baik.sumber
package type is pom - so not running tests
- untuk memberikan petunjuk kepada pengembang :(MEMPERBARUI:
Seperti @scottyseus katakan dalam komentar, mulai dari Maven Surefire 2.22.0 berikut ini sudah cukup:
Saat menggunakan JUnit 5, saya mengalami masalah yang sama. Maven Surefire membutuhkan plugin untuk menjalankan tes JUnit 5. Tambahkan ini ke kami
pom.xml
:Sumber: https://junit.org/junit5/docs/current/user-guide/#running-tests-build-maven
sumber
junit-platform-surefire-provider
.surefire-provider
ataujupiter-engine
artefak. Tes saya tampaknya berjalan baik tanpa mereka, setidaknya. lihat jawaban ini .org.junit.jupiter.api.Test
daripadaorg.junit.Test
menggunakan plugin ini atau tes tidak akan ditemukan.Juga, periksa apakah direktori kelas tes Anda (mis. Src / test / java) sesuai dengan direktori yang terdaftar di properti
<testSourceDirectory>
di pom.xml Anda di bawah<build>
properti. Butuh waktu beberapa saat untuk menemukannya.sumber
Maven tidak akan menjalankan tes Anda jika proyek sudah
<packaging>pom</packaging>
Anda perlu mengatur kemasan menjadi toples (atau beberapa tipe artefak java lainnya) agar tes dapat berjalan:
<packaging>jar</packaging>
sumber
Dalam kasus saya itu menambahkan mesin junit-vintage yang membuatnya kompatibel dengan tes versi JUnit yang lebih lama dan dapat menjalankannya. Karena saya menggunakan JUnit 5.
sumber
Banyak jawaban ini cukup berguna bagi saya di masa lalu, tetapi saya ingin menambahkan skenario tambahan yang telah menghabiskan waktu, karena dapat membantu orang lain di masa depan:
Pastikan kelas dan metode tes bersifat publik.
Masalah saya adalah bahwa saya menggunakan kelas otomatis / metode generasi fitur IDE saya (IntelliJ) dan untuk beberapa alasan itu membuatnya sebagai paket-pribadi. Saya menemukan ini lebih mudah untuk dilewatkan daripada yang diharapkan.
sumber
Periksa itu (untuk jUnit - 4.12 dan Eclipse surefire plugin)
sumber
src/test/java
. Konvensi paket adalah untuk struktur dan untuk memungkinkan tes mengakses metode paket-pribadi.Ditemukan jika Anda mengawali tes dengan 'Abstrak' itu akan diabaikan secara default juga.
sumber
*/TestAbstractSomeClassName.java
.Saya berjuang dengan masalah ini. Dalam kasus saya, saya tidak mengimpor hak @Test yang anotasi .
1) Periksa apakah @Test dari @Test org.junit.jupiter.api.Test (jika Anda menggunakan Junit 5).
2) Dengan Junit5 bukan
@RunWith(SpringRunner.class)
, gunakan@ExtendWith(SpringExtension.class)
sumber
Jika Anda memiliki aplikasi Java / Groovy bersama dan yang Anda miliki hanyalah tes unit Groovy, maka Maven tidak akan menemukan tes apa pun. Ini dapat diperbaiki dengan menambahkan satu unit tes di bawah src / test / java.
sumber
Saya juga memiliki masalah serupa, setelah menjelajahi menemukan bahwa ketergantungan testng menyebabkan masalah ini. Setelah menghapus ketergantungan testng dari pom (karena saya tidak membutuhkannya lagi), itu mulai berfungsi dengan baik untuk saya.
sumber
Jika Anda membuat
Spring Boot
aplikasi menggunakan Spring Initializr , tes berjalan baik dari Intellij Idea. Tetapi, jika mencoba menjalankan tes dari baris perintah:Anda mungkin terkejut, bahwa tidak ada tes yang dijalankan sama sekali. Saya mencoba menambahkan
surefire plugin
tanpa hasil. Jawabannya sederhana:pom.xml
berisi ketergantungan berikut:Pengecualian,,
junit-vintage-engine
didedikasikan untuk menjaga kompatibilitas denganJUnit 4.x
. Jadi, versi baru Spring Boot Initializr tidak mendukungnya secara default. Setelah saya menghapus pengecualian,Maven
mulai melihat tes proyek.sumber
Jika nama kelas tes Anda tidak mengikuti konvensi penamaan standar (seperti yang disorot oleh @axtavt di atas), Anda perlu menambahkan pola / nama kelas
pom.xml
dalam rangka untuk Maven memilih tes -sumber
seharusnya
The Maven menemukan ujung-ujungnya Tes atau dimulai dengan Uji untuk berjalan secara otomatis.
Namun, Anda bisa menggunakan
untuk menjalankan tes Anda.
sumber
Inilah kode persis yang harus saya tambahkan ke pom.xml saya:
Dan inilah dependensi saya:
sumber
Saya menghadapi masalah yang sama, diselesaikan dengan perubahan di bawah di pom.xml:
...
diubah menjadi:
sumber
Alasan lain untuk tidak menjalankan test case terjadi pada saya - Saya memiliki properti bernama "test" untuk tujuan yang sama sekali berbeda, tetapi itu mengganggu plugin jitu. Jadi, silakan periksa POM Anda untuk:
dan hapus.
sumber
Satu tip lagi (selain jawaban sebelumnya):
Di Eclipse, buka Properti proyek Anda> klik
Run/Debug Settings
:Di sana Anda dapat menambahkan (Baru ...) atau menghapus (Hapus) tes JU (JUnit) apa pun yang Anda miliki dalam proyek Anda (di bawah
src/test/java
folder, atau kursus).sumber
Jika Anda telah menulis tes Anda di JUnit 4 dan menambahkan dependensi JUnit 5 ke plugin surefire, tes Anda tidak akan berjalan.
Dalam hal ini, cukup beri komentar JUnit 5 dependensi dari plugin surefire:
sumber
Mengikuti bekerja dengan baik untuk saya di Junit 5
https://junit.org/junit5/docs/current/user-guide/#running-tests-build-maven
sumber
Dalam kasus saya, kami adalah aplikasi multimodule migrasi ke Spring Boot. Sayangnya maven tidak menjalankan semua tes lagi di modul. Penamaan Kelas Tes tidak berubah, kami mengikuti konvensi penamaan.
Pada akhirnya itu membantu, ketika saya menambahkan dependensi
surefire-junit47
ke pluginmaven-surefire-plugin
. Tapi saya tidak bisa menjelaskan, mengapa, itu coba-coba:sumber
Saya menjalankan Junit-5 test case dengan pakar 3.6.2 dan selalu ditampilkan Test run: 0
[
Tes Junt-5 tidak berjalan di bawah tautan pakar menyelamatkan hari saya.
sumber
junitArtifactName
mungkin juga terjadi jika JUnit yang digunakan bukan standar (junit:junit
) tetapi misalnya ...sumber
Jika seseorang telah mencari dan saya tidak menyelesaikannya, saya memiliki perpustakaan untuk berbagai tes:
Ketika saya menginstal junit semuanya bekerja, saya harap dan bantu ini:
sumber
saya menggunakan kode ini
ke pom.xml saya, pastikan saja file testng itu khusus di sana
sumber
Masalah seperti itu dapat terjadi ketika Anda menggunakan surfire plugin 3.x.x + dengan JUnit5 dan secara tidak sengaja memberi anotasi pada kelas tes dengan
@Test
anotasi dari JUnit4.Gunakan:
org.junit.jupiter.api.Test
(JUnit5) sebagai gantiorg.junit.Test
(Junit4)CATATAN: ini mungkin sulit untuk diketahui karena IDE mungkin menjalankan masalah tanpa ini sama seperti tes JUnit4.
sumber
Masalah lain yang mudah diabaikan - Pastikan file kelas Anda memiliki ekstensi .java
sumber