Maven ile tek bir test yöntemi çalıştırın


519

Belirli bir sınıftaki tüm testleri çalıştırabileceğinizi biliyorum:

mvn test -Dtest=classname

Ama bireysel bir yöntem çalıştırmak istiyorum ve -Dtest = classname.methodname çalışmıyor gibi görünüyor.


3
Bunu da nasıl yapacağımı bilmek isterdim. Ancak, kendimi çok sık yaparken bulduğumda, testin kendi sınıfına bölünmek için bir aday olabileceğini düşünüyorum, böylece mvn test -Dtest=classnamesözdizimini kullanabilirsiniz .
John Paulett

Sadece komut satırı üzerinden nasıl yapılacağını bilmek istiyor musunuz ?? Veya bir IDE (eclipse) kullanmak sizin için uygun olur mu?
Diego Dias

1
Bir komut satırına bakıyordum. Junit eclipse eklentisinin bunu yapmanıza izin vereceğini düşünüyorum.
BillMan

Bunu Maven 1 için yaptım. Hatırladığım gibi, JUnit'te, test sınıfının iç kontrolünden sorumlu olan değişikliklerin yapılmasını içeriyordu.
kdgregory

Yanıtlar:


698

Maven'de tek bir test yöntemi çalıştırmak için, komutu şu şekilde sağlamanız gerekir:

mvn test -Dtest=TestCircle#xyz test

TestCircletest sınıfı adı nerede vexyz test yöntemidir.

Joker karakterler de çalışır; hem yöntem adında hem de sınıf adında.

Çok modüllü bir projede test yapıyorsanız, testin yapıldığı modülü belirtin -pl <module-name>.

Entegrasyon testleri için aşağıdaki it.test=...seçeneği kullanın test=...:

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

4
Surefire 2.9 sürümüne geçerek "Test Yapılmadı" hatası düzeltildi
qwerty

15
"Hiçbir Test Yürütülmedi!" 2.14'e yükselterek:
alfonx

54
Çok modüllü bir projede test yapıyorsanız, testin yapıldığı modülü de belirtmeniz gerekir -pl <module-name>.
Jon

22
-DfailIfNoTests=falseTest olmadan projeleri atlamak için kullanın . No Tests Were Executedkök projeden test çalıştırmaya çalıştığınızda ve hiç test yapılmayan modüller olduğunda gerçekleşir.
Kiraz

4
Bu komut çalışıyor !! mvn "-DTest=JoinTeamTestCases#validateJoinTeam" test "-DTest" in UPPER CASE 'T' ile başladığını unutmayın.
vikas

25

Güzel ateş ile ilgili bir sorun var 2.12. Bu benim maven-surefire-eklentisini 2.12'den 2.11'e değiştirmeme ne oldu:

  1. mvn test -Dtest=DesignRulesTest

    Sonuç:
    [HATA] org.apache.maven.plugins hedefi yürütülemedi: maven-surefire-plugin: 2.12 : pmd projesinde test (varsayılan test): Test yapılmadı !

  2. mvn test -Dtest=DesignRulesTest

    Sonuç: [BİLGİ] --- maven-surefire-eklentisi: 2.11 : test (varsayılan test) @ pmd --- ... Çalışıyor net.sourceforge.pmd.lang.java.rule.design.DesignRulesTest Testler çalışıyor: 5 , Hatalar: 0, Hatalar: 0, Atlandı: 4, Geçen süre: 4.009 sn


5
2.12.1 veya üzeri sürümlerde tekrar çalışır.
yurez

"Hiçbir Test Yürütülmedi!" Düzeltildi. 2.14'e yükselterek
alfonx

Kullanırsanız @Category(IntegrationTest.class), kullanın -Dit.test=ClassName, aksi takdirde No tests were executed!en son eklenti sürümleriyle bile elde edersiniz .
uvsmtid

16

TestNG ile ne yaptığım (üzgünüm, JUnit bunu desteklemiyor) test senaryoları Çalıştırmak istediğim teste bir grup atayabilirim

@Test(groups="broken")

Ve sonra sadece 'mvn -Dgroups = broken' komutunu çalıştırın.


1
Bu iyi bir cevap. Benim durumumda, test çalıştırılmaya çalışıldı, ancak bazı Seam bileşenleri düzgün bir şekilde ayarlanmadı, bu yüzden kurulum kodunun bir kısmını atlıyor gibi görünüyor.
Chris Williams

1
Doğru. @BeforeMethod'unuza grup = koymanız veya @BeforeMethod (alwaysRun = true)
yapmalısınız

Derleme sorununu aldığım için lütfen burada grupların ne olduğunu bana bildirin.
Paramesh Korrakuti

14

Tek bir Test Sınıfında bir dizi yöntemi çalıştırma 2.7.3 sürümü ile, tek bir Test Sınıfında yalnızca n testi çalıştırabilirsiniz.

NOT: junit 4.x ve TestNG için desteklenir.

Aşağıdaki sözdizimini kullanmalısınız

mvn -Dtest=TestCircle#mytest test

Desenleri de kullanabilirsiniz

mvn -Dtest=TestCircle#test* test

Surefire 2.12.1'den itibaren, birden çok yöntem seçebilirsiniz (JUnit4X sadece şu anda yamalar hoş geldiniz)

mvn -Dtest=TestCircle#testOne+testTwo test

Tek testlerle ilgili bu bağlantıyı kontrol edin


2
Benim durumumda mvn gibi TestClass # test adını iki kere alıntılamak zorunda kaldım -Dtest = "TestCircle # myTest" testi
Pratik Khadloya 27:14

@PratikKhadloya Bağımlı testler için nasıl çalıştığı hakkında bir fikriniz var mı? Diyelim ki TestClass'ta test1 (), test2 (), test3 () yöntemleri var ve test2 test1'e bağlı. Nasıl test2 () çalıştırabilirim?
Ziska

3
Testleriniz arasında bağımlılıklarınız varsa, yanlış bir şey yaptığınızı düşünüyorum. Her test diğer testlerden bağımsız olmalıdır. Aralarındaki kuplajı çıkarmanız gerekir.
Pratik Khadloya

11

Aşağıdaki sözdizimini kullanarak belirli test sınıflarını ve yöntemlerini çalıştırabilirsiniz:

  1. tam paket: mvn testi -Dtest = "com.oracle.tests. **"

  2. bir sınıftaki tüm yöntemler: mvn test -Dtest = CLASS_NAME1

  3. tek sınıftan tek yöntem: mvn testi -Dtest = CLASS_NAME1 # METHOD_NAME1

  4. birden çok sınıftan çoklu yöntem: mvn testi -Dtest = CLASS_NAME1 # METHOD_NAME1, CLASS_NAME2 # METHOD_NAME2


10

Bu komut çalışıyor !! mvn "-DTest=JoinTeamTestCases#validateJoinTeam" test"-DTest" in UPPER CASE 'T' ile başladığını unutmayın.


4
Does not surefire 2.18.x ile çalışmak; sadece tüm testleri yapar.
Janaka Bandara

4

Test tobrien bahsettiği parametre bir kullanarak bir yöntemi belirlemenizi sağlar # yöntemi adından önce. Bu JUnit ve TestNG için çalışmalıdır. Hiç denemedim, sadece Surefire Eklentisi sayfasında okuyun :

İnclude / excludes parametrelerini geçersiz kılarak tek tek testleri dosya adına göre çalıştırmak için bu parametreyi belirtin. Burada belirttiğiniz her bir model ** / $ {test} .java gibi biçimlendirilmiş bir içerme kalıbı oluşturmak için kullanılır, böylece "foo / MyTest.java" adlı tek bir testi çalıştırmak için sadece "-Dtest = MyTest" yazabilirsiniz. Bu parametre, include / excludes parametrelerini ve TestNG suiteXmlFiles parametresini geçersiz kılar. 2.7.3'ten beri #myMethod veya # my * ethod ekleyerek testte sınırlı sayıda yöntem yürütebilirsiniz. Si türü "-Dtest = MyTest # myMethod" junit 4.x ve testNg için desteklenir


3

JUnit'in yeni sürümleri Kategoriler koşucusunu içerir: http://kentbeck.github.com/junit/doc/ReleaseNotes4.8.html

Ancak JUnit'in serbest bırakma prosedürü maven tabanlı değildir, bu nedenle maven kullanıcıları bunu havuzlarına manuel olarak koymak zorundadır.


1
Güzel. Ama bunun soruyu nasıl cevapladığını anlamıyorum.
Pascal Thivent

2
Subj, maven-surefire-plugin'in 2.7.3 sürümünden desteklenmektedir: maven.apache.org/plugins/maven-surefire-plugin/examples/…
Andriy Plokhotnyuk

3

Surefire eklentisi sürüm 2.22.1'den (muhtemelen daha önce) testng.xml kullanırken testnames özelliğini kullanarak tek bir test çalıştırabilirsiniz

Aşağıdaki testng.xml verildi

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

pom.xml ile

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

Komut satırından

mvn clean test -DselectedTests=run-B-test

Daha fazla okuma - Testng kullanarak Maven güzelliğinde eklentisi


-5

Tek bir test sınıfı çalıştırabilirsiniz, ancak bir test sınıfı içinde tek bir yöntem çalıştıramazsınız. Sınıfın tam adını değil, sınıfın basit adını kullanırsınız. Yani, "org.sonatype.test.MyTest" içinde bir testiniz varsa ve çalıştırmak istediğiniz tek test buysa, komut satırınız şöyle görünür:

mvn test -Dtest=MyTest

Önceki yorumlarda açıklanan çözümü tek bir modül projesinde test ettim, bu yüzden bu yorumun söylediği doğru değil.
tonio

5
Başlangıçta yanıtlandığında 2009'da doğru olabilir.
telaşlı

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.