Jalankan metode uji tunggal dengan pakar


519

Saya tahu Anda dapat menjalankan semua tes di kelas tertentu menggunakan:

mvn test -Dtest=classname

Tapi saya ingin menjalankan metode individual dan -Dtest = classname.methodname tampaknya tidak berfungsi.


3
Saya akan tertarik mengetahui bagaimana melakukan ini juga. Namun, jika saya mendapati diri saya cukup sering melakukannya, saya pikir tes itu mungkin merupakan kandidat untuk dibagi ke dalam kelasnya sendiri, sehingga Anda dapat menggunakan mvn test -Dtest=classnamesintaksisnya.
John Paulett

Apakah Anda ingin tahu cara melakukannya hanya melalui command line ?? Atau menggunakan IDE (gerhana) akan bekerja untuk Anda?
Diego Dias

1
Saya sedang melihat baris perintah. Saya pikir plugin gerhana junit akan memungkinkan Anda untuk melakukan ini.
BillMan

Saya melakukan ini untuk Maven 1. Seperti yang saya ingat, itu melibatkan membuat perubahan pada JUnit, yang bertanggung jawab untuk mengintrospeksi kelas tes.
kdgregory

Jawaban:


698

Untuk menjalankan metode uji tunggal di Maven, Anda perlu memberikan perintah sebagai:

mvn test -Dtest=TestCircle#xyz test

dimana TestCirclenama kelas tes danxyz metode tes.

Karakter wild card juga berfungsi; baik dalam nama metode dan nama kelas.

Jika Anda menguji dalam proyek multi-modul, tentukan modul yang digunakan untuk menguji -pl <module-name>.

Untuk tes integrasi gunakan it.test=...opsi alih-alih test=...:

mvn -pl <module-name> -Dit.test=TestCircle#xyz integration-test

4
Memperbaiki kesalahan "Tidak Ada Tes yang Dieksekusi" dengan merendahkan ke versi pasti 2.9
qwerty

15
Saya memperbaiki, "Tidak Ada Tes yang Dilakukan!" dengan memutakhirkan ke 2.14:
alfonx

54
Jika Anda menguji dalam proyek multi-modul, Anda juga perlu menentukan modul yang digunakan dalam pengujian -pl <module-name>.
Jon

22
Gunakan -DfailIfNoTests=falseuntuk melewati proyek tanpa tes. No Tests Were Executedterjadi ketika Anda mencoba menjalankan tes dari proyek root dan ada modul tanpa tes sama sekali.
Cherry

4
Perintah ini berhasil !! mvn "-DTest=JoinTeamTestCases#validateJoinTeam" test Perhatikan bahwa "-DTest" dimulai dengan KASUS UPPER 'T'.
vikas

25

Ada masalah dengan pasti 2.12. Inilah yang terjadi pada saya mengubah maven-surefire-plugin dari 2.12 menjadi 2.11:

  1. mvn test -Dtest=DesignRulesTest

    Hasil:
    [KESALAHAN] Gagal menjalankan tujuan org.apache.maven.plugins: maven-surefire-plugin: 2.12 : tes (uji default) pada proyek pmd: Tidak ada tes yang dijalankan!

  2. mvn test -Dtest=DesignRulesTest

    Hasil: [INFO] --- maven-surefire-plugin: 2.11 : test (default-test) @ pmd --- ... Menjalankan net.sourceforge.pmd.lang.java.rule.design.DesignRulesTest Tes dijalankan: 5 , Kegagalan: 0, Kesalahan: 0, Dilewati: 4, Waktu berlalu: 4,009 dtk


5
Bekerja lagi di 2.12.1 atau lebih baru.
yurez

Memperbaiki "Tidak Ada Tes yang Dilakukan!" dengan memutakhirkan ke 2.14
alfonx

Jika Anda menggunakan @Category(IntegrationTest.class), gunakan -Dit.test=ClassName, jika tidak, Anda akan mendapatkan No tests were executed!versi plugin terbaru.
uvsmtid

16

Apa yang saya lakukan dengan TestNG saya, (maaf, JUnit tidak mendukung ini) kasus uji adalah saya dapat menetapkan grup untuk tes yang ingin saya jalankan

@Test(groups="broken")

Dan kemudian jalankan 'mvn -Dgroups = broken'.


1
Ini jawaban yang bagus. Dalam kasus saya, tes mencoba untuk menjalankan tetapi beberapa komponen Seam tidak diatur dengan benar sehingga sepertinya ini melewatkan beberapa bagian dari kode pengaturan juga.
Chris Williams

1
Benar. Anda perlu memasukkan kelompok = rusak di @BeforeMethod Anda, atau lakukan @BeforeMethod (alwaysRun = true)
tunaranch

Tolong beri tahu saya apa itu grup di sini, karena saya mendapatkan masalah kompilasi.
Paramesh Korrakuti

14

Menjalankan serangkaian metode dalam Kelas Tes Tunggal Dengan versi 2.7.3, Anda hanya dapat menjalankan n tes dalam Kelas Tes tunggal.

CATATAN: ini didukung untuk junit 4.x dan TestNG.

Anda harus menggunakan sintaks berikut

mvn -Dtest=TestCircle#mytest test

Anda juga bisa menggunakan pola

mvn -Dtest=TestCircle#test* test

Pada ayal 2.12.1, Anda dapat memilih beberapa metode (hanya JUnit4X saat ini, patch diterima)

mvn -Dtest=TestCircle#testOne+testTwo test

Periksa tautan ini tentang tes tunggal


2
Dalam kasus saya, saya harus menggandakan penawaran testClass # test name seperti mvn -Dtest = "TestCircle # myTest" test
Pratik Khadloya

@PratikKhadloya Ada yang tahu cara kerjanya untuk tes dependen? Katakanlah, saya memiliki metode test1 (), test2 (), test3 () di TestClass dan test2 tergantung pada test1. Bagaimana saya bisa menjalankan hanya test2 ()?
Ziska

3
Saya pikir jika Anda memiliki ketergantungan di antara tes Anda, Anda melakukan sesuatu yang salah. Setiap tes harus independen dari tes lain. Anda harus menghapus sambungan di antara mereka.
Pratik Khadloya

11

Anda dapat menjalankan kelas dan metode pengujian khusus menggunakan sintaks berikut:

  1. paket lengkap: mvn test -Dtest = "com.oracle.tests. **"

  2. semua metode di kelas: mvn test -Dtest = CLASS_NAME1

  3. metode tunggal dari kelas tunggal: mvn test -Dtest = CLASS_NAME1 # METHOD_NAME1

  4. beberapa metode dari beberapa kelas: mvn test -Dtest = CLASS_NAME1 # METHOD_NAME1, CLASS_NAME2 # METHOD_NAME2


9

Perintah ini berhasil !! mvn "-DTest=JoinTeamTestCases#validateJoinTeam" testPerhatikan bahwa "-DTest" dimulai dengan KASUS UPPER 'T'.


4
Apakah tidak bekerja dengan ayal 2.18.x; itu hanya menjalankan semua tes.
Janaka Bandara

4

The uji parameter yang disebutkan oleh tobrien memungkinkan Anda untuk menentukan metode menggunakan # sebelum nama metode. Ini harus bekerja untuk JUnit dan TestNG. Saya belum pernah mencobanya, cukup baca di halaman Plugin Surefire :

Tentukan parameter ini untuk menjalankan tes individual dengan nama file, menimpa parameter include / exclude. Setiap pola yang Anda tentukan di sini akan digunakan untuk membuat pola menyertakan diformat seperti ** / $ {test} .java, jadi Anda cukup mengetik "-Dtest = MyTest" untuk menjalankan tes tunggal yang disebut "foo / MyTest.java". Parameter ini mengabaikan parameter include / exclude, dan parameter TestNG suiteXmlFiles. sejak 2.7.3 Anda dapat menjalankan sejumlah metode dalam pengujian dengan menambahkan #myMethod atau # my * ethod. Si tipe "-Dtest = MyTest # myMethod" didukung untuk junit 4.x dan testNg



3

Pada plugin plugin surefire versi 2.22.1 (mungkin lebih awal) Anda dapat menjalankan tes tunggal menggunakan properti testnames saat menggunakan testng.xml

Diberikan testng.xml berikut

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
    <test name="all-tests">
        <classes>
            <class name="server.Atest"/>
            <class name="server.Btest"/>
            <class name="server.Ctest"/>
        </classes>
    </test>
    <test name="run-A-test">
        <classes>
            <class name="server.Atest"/>
        </classes>
    </test>
    <test name="run-B-test">
        <classes>
            <class name="server.Btest"/>
        </classes>
    </test>
    <test name="run-C-test">
        <classes>
            <class name="server.Ctest"/>
        </classes>
    </test>
</suite> 

dengan 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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    [...]
    <properties>
        <selectedTests>all-tests</selectedTests>
    </properties>
    [...]
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.22.1</version>
            <configuration>
                <suiteXmlFiles>
                    <file>src/test/resources/testng.xml</file>
                </suiteXmlFiles>
                <properties>
                    <property>
                        <name>testnames</name>
                        <value>${selectedTests}</value>
                    </property>
                </properties>
            </configuration>
        </plugin>
    </plugins>
    [...]
</project>

Dari baris perintah

mvn clean test -DselectedTests=run-B-test

Bacaan lebih lanjut - Maven plugin pasti menggunakan testng


-5

Anda dapat menjalankan kelas uji tunggal, tetapi bukan metode tunggal dalam kelas uji. Anda menggunakan nama kelas yang sederhana bukan nama kelas yang sepenuhnya memenuhi syarat. Jadi, jika Anda memiliki tes di "org.sonatype.test.MyTest" dan itu adalah satu-satunya tes yang ingin Anda jalankan, baris perintah Anda akan terlihat seperti ini:

mvn test -Dtest=MyTest

Saya menguji solusi yang dijelaskan pada komentar sebelumnya dalam proyek modul tunggal, jadi apa yang dikatakan komentar ini tidak benar.
tonio

5
Mungkin benar pada tahun 2009 ketika awalnya dijawab.
flurdy

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.