Maven tidak menemukan tes JUnit untuk dijalankan


416

Saya punya program pakar, itu mengkompilasi dengan baik. Ketika saya menjalankannya mvn testtidak 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] ------------------------------------------------------------------------

Jawaban:


667

Secara default, Maven menggunakan konvensi penamaan berikut ketika mencari tes untuk dijalankan:

Jika kelas tes Anda tidak mengikuti konvensi ini, Anda harus mengganti nama atau mengkonfigurasi Maven Surefire Plugin untuk menggunakan pola lain untuk kelas tes.


4
Saya merasa lebih menarik untuk mengubah konfigurasi pakar. Konvensi penamaan ini memang menimbulkan bahaya bagi pengguna yang tidak berpengalaman. Penamaan testcases Anda seperti SomethingTest1, SomethingTest2 akan menghasilkan tes diam-diam tidak dilakukan. Maven tidak dapat melakukan ini untuk kompatibilitas mundur tetapi itu membuat lebih banyak logika untuk mencari testcases di semua file.
Tobias Kremer

8
Saya tidak pernah tahu ini - memiliki dua kasus yang berakhir dengan "Tes", dan pakar menolak untuk menjalankannya ... diubah menjadi "Tes", dan semuanya baik-baik saja di guild lolipop lagi. Terima kasih.
demaniak

2
@Tobias Saya setuju dengan poin Anda tentang bahaya yang ditimbulkan oleh konvensi penamaan. Ini semacam juga mematahkan pola yang tersirat oleh penggunaan anotasi. Hasil implisit menggunakan anotasi adalah bahwa kelas / metode yang memiliki anotasi spesifik dapat dicari. Saya berharap bahwa Maven tidak memberlakukan pembatasan konvensi penamaan dan sebaliknya hanya mengandalkan pemindaian @Test metode beranotasi di kelas mana pun.
Angad

2
Perhatikan bahwa dokumentasi jitu sekarang mengklaim bahwa **/*Tests.javaitu termasuk default!
Gareth

11
Pertanyaan: Jadi mengapa membuat anotasi dengan @test jika Anda tetap harus mengikuti konvensi Uji *?
dynex

88

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

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

Baik

/my_program/src/test/java/MyTest.java

3
Terima kasih! Ini dan mengatur ruang lingkup untuk menguji ( <scope>test<scope>) dalam pom.xmlfile melakukannya untuk saya.
dinesharjani

Saya mengalami ini, hati-hati untuk tes vs tes. Yang tepat adalah tes
Bruck Wubete

72

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.


4
Saran yang sangat baik! Menunjukkan bahaya 'copy-paste' ketika membagi artefak Maven modul tunggal menjadi beberapa.
morsor

4
Saya berharap maven mencetak pesan - package type is pom - so not running tests- untuk memberikan petunjuk kepada pengembang :(
Arun Avanathan

60

MEMPERBARUI:

Seperti @scottyseus katakan dalam komentar, mulai dari Maven Surefire 2.22.0 berikut ini sudah cukup:

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

Saat menggunakan JUnit 5, saya mengalami masalah yang sama. Maven Surefire membutuhkan plugin untuk menjalankan tes JUnit 5. Tambahkan ini ke kami 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>

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


Saya mendapatkan "tidak ditemukan" untuk junit-platform-surefire-provider.
Arya Pourtabatabaie

2
Perhatikan bahwa dengan Surefire 2.22, Anda tidak perlu menambahkan dependensi pada surefire-provideratau jupiter-engineartefak. Tes saya tampaknya berjalan baik tanpa mereka, setidaknya. lihat jawaban ini .
scottysseus

Perlu juga dicatat bahwa Anda harus menggunakan org.junit.jupiter.api.Testdaripada org.junit.Testmenggunakan plugin ini atau tes tidak akan ditemukan.
austin_ce

30

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.


13

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>


12

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.

<dependency>
        <groupId>org.junit.vintage</groupId>
        <artifactId>junit-vintage-engine</artifactId>
        <scope>test</scope>
</dependency>

Saya pikir SpringBoot hanya mencakup apa yang digunakannya. Masuk akal bahwa Anda harus menentukan dependensi Anda sesuai dengan kebutuhan Anda. Jika tidak, Anda akan mengimpor sejumlah perpustakaan yang tidak Anda gunakan.
Duc Tran

12

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.


1
Ini adalah masalah yang saya miliki juga, untuk beberapa alasan IntelliJ membuat tes sebagai paket-pribadi dan Maven tidak dapat melihatnya. Mengubah metode kelas dan @Test ke publik membuat pakar melaksanakan tes.
AlexC

Memecahkan masalah saya! Perhatikan bahwa ini tidak berlaku untuk JUnit 5+. Saya kira pembuat kode IntelliJ mengasumsikan Anda menggunakan versi terbaru.
lamino

@lamino Saya menggunakan junit5 dan gagal karena metode pengujian saya tidak umum
SudhirKumar

Agak kurang sopan dari IntelliJ untuk memberi tahu saya bahwa metode ini bisa bersifat paket-pribadi ..
Wecherowski

9

Periksa itu (untuk jUnit - 4.12 dan Eclipse surefire plugin)

  1. Tambahkan versi jUnit yang diperlukan di POM.xml dalam dependensi. Do Maven -> Perbarui proyek untuk melihat guci yang diperlukan diekspor dalam proyek.
  2. Kelas tes berada di bawah folder src / test / java dan subdirektori dari folder ini (atau folder dasar dapat ditentukan dalam POM di config testSourceDirectory). Nama kelas harus memiliki kata 'Tes' tailng.
  3. Metode Tes di kelas tes harus memiliki penjelasan @Test

1
Ini lebih merupakan masalah konfigurasi java, tetapi selain menamai kelas tes dengan benar dan meletakkan file uji di direktori tes di bawah src, nama paket kelas uji harus cocok dengan nama paket kelas yang Anda uji.
Paul

2
@Paul False - Maven akan menjalankan semua kelas yang sesuai dengan konvensisrc/test/java . Konvensi paket adalah untuk struktur dan untuk memungkinkan tes mengakses metode paket-pribadi.
Michael K


6

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)

import org.junit.jupiter.api.Test;

@ExtendWith(SpringExtension.class)
@SpringBootTest
@AutoConfigureMockMvc
@TestPropertySource(locations = "classpath:application.properties")    
public class CotacaoTest {
    @Test
    public void testXXX() {

    }
}

4

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.


4

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.

    <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>6.8</version>
        <scope>test</scope>
    </dependency>

4

Jika Anda membuat Spring Bootaplikasi menggunakan Spring Initializr , tes berjalan baik dari Intellij Idea. Tetapi, jika mencoba menjalankan tes dari baris perintah:

mvn clean test

Anda mungkin terkejut, bahwa tidak ada tes yang dijalankan sama sekali. Saya mencoba menambahkan surefire plugintanpa hasil. Jawabannya sederhana: pom.xmlberisi ketergantungan berikut:

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

Pengecualian,, junit-vintage-enginedidedikasikan untuk menjaga kompatibilitas dengan JUnit 4.x. Jadi, versi baru Spring Boot Initializr tidak mendukungnya secara default. Setelah saya menghapus pengecualian, Mavenmulai melihat tes proyek.


3

Jika nama kelas tes Anda tidak mengikuti konvensi penamaan standar (seperti yang disorot oleh @axtavt di atas), Anda perlu menambahkan pola / nama kelas pom.xmldalam rangka untuk Maven memilih tes -

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

seharusnya

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

The Maven menemukan ujung-ujungnya Tes atau dimulai dengan Uji untuk berjalan secara otomatis.

Namun, Anda bisa menggunakan

mvn surefire:test -Dtest=ClassUnderTestTests.java 

untuk menjalankan tes Anda.


2

Inilah kode persis yang harus saya tambahkan ke pom.xml saya:

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

Dan inilah dependensi saya:

    <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

Saya menghadapi masalah yang sama, diselesaikan dengan perubahan di bawah di pom.xml:

<build>
    <testSourceDirectory>test</testSourceDirectory>

...

diubah menjadi:

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

1

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:

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

dan hapus.


1

Satu tip lagi (selain jawaban sebelumnya):

Di Eclipse, buka Properti proyek Anda> klik Run/Debug Settings:

"Halaman ini memungkinkan Anda untuk mengelola konfigurasi peluncuran dengan sumber daya yang saat ini dipilih"

Di sana Anda dapat menambahkan (Baru ...) atau menghapus (Hapus) tes JU (JUnit) apa pun yang Anda miliki dalam proyek Anda (di bawah src/test/javafolder, atau kursus).


1

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:

        <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

Mengikuti bekerja dengan baik untuk saya di Junit 5

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

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-junit47ke plugin maven-surefire-plugin. Tapi saya tidak bisa menjelaskan, mengapa, itu coba-coba:

<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

Saya menjalankan Junit-5 test case dengan pakar 3.6.2 dan selalu ditampilkan Test run: 0

[

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

Tes Junt-5 tidak berjalan di bawah tautan pakar menyelamatkan hari saya.


0

junitArtifactNamemungkin juga terjadi jika JUnit yang digunakan bukan standar ( junit:junit) tetapi misalnya ...

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

0

Jika seseorang telah mencari dan saya tidak menyelesaikannya, saya memiliki perpustakaan untuk berbagai tes:

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

Ketika saya menginstal junit semuanya bekerja, saya harap dan bantu ini:

<dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>

0

saya menggunakan kode ini

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

ke pom.xml saya, pastikan saja file testng itu khusus di sana

<suiteXmlFile>/Users/mac/xxx/xxx/xx.xxxx.xx/xxx.restassured.xx/testng.xml</suiteXmlFile>

0

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


0

Masalah lain yang mudah diabaikan - Pastikan file kelas Anda memiliki ekstensi .java

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.