Maven के साथ एक एकल परीक्षा पद्धति भागो


519

मुझे पता है कि आप एक निश्चित कक्षा में सभी परीक्षण चला सकते हैं:

mvn test -Dtest=classname

लेकिन मैं एक व्यक्तिगत विधि चलाना चाहता हूं और -Destest = classname.methodname काम नहीं करता।


3
मुझे यह जानने में दिलचस्पी होगी कि यह कैसे करना है। हालांकि, अगर मैंने खुद को इसे अक्सर करते हुए पाया, तो मुझे लगता है कि परीक्षण एक उम्मीदवार को अपनी कक्षा में विभाजित करने के लिए हो सकता है, इसलिए आप mvn test -Dtest=classnameसिंटैक्स का उपयोग कर सकते हैं ।
जॉन पौलेट

क्या आप जानना चाहते हैं कि इसे केवल कमांड लाइन के माध्यम से कैसे किया जाए ?? या एक आईडीई (ग्रहण) का उपयोग करना आपके लिए काम करेगा?
डिएगो डायस

1
मैं एक कमांड लाइन देख रहा था। मुझे लगता है कि junit eclipse plugin आपको ऐसा करने की अनुमति देगा।
बिलमैन

मैंने मावेन के लिए 1 किया। जैसा कि मैंने याद किया, इसमें जेयूनिट में बदलाव करना शामिल था, जो कि परीक्षण वर्ग को आत्मनिरीक्षण करने के लिए जिम्मेदार है।
kdgregory

जवाबों:


698

मावेन में एक एकल परीक्षण विधि चलाने के लिए, आपको निम्न निर्देश देने होंगे:

mvn test -Dtest=TestCircle#xyz test

TestCircleपरीक्षण वर्ग नाम कहां है और xyzपरीक्षण विधि है।

वाइल्ड कार्ड वर्ण भी काम करते हैं; विधि नाम और वर्ग नाम दोनों में।

यदि आप एक मल्टी-मॉड्यूल प्रोजेक्ट में परीक्षण कर रहे हैं, तो उस मॉड्यूल को निर्दिष्ट करें जो परीक्षण के साथ है -pl <module-name>

एकीकरण परीक्षणों के लिए it.test=...इसके बजाय विकल्प का उपयोग करें test=...:

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

4
निश्चित रूप से 2.9 पर डाउनग्रेड करके "नो टेस्ट वियर एक्सपेक्टेड" एरर तय किया गया था
क्वर्टी

15
मैंने तय किया "कोई परीक्षण नहीं किया गया!" 2.14 में अपग्रेड करके:
अल्फोंक्स

54
यदि आप मल्टी-मॉड्यूल प्रोजेक्ट में परीक्षण कर रहे हैं, तो आपको उस मॉड्यूल को भी निर्दिष्ट करना होगा जो परीक्षण के साथ है -pl <module-name>
जॉन

22
-DfailIfNoTests=falseपरीक्षण के बिना परियोजनाओं को छोड़ने के लिए उपयोग करें । No Tests Were Executedजब आप रूट प्रोजेक्ट से परीक्षण चलाने का प्रयास करते हैं और बिना किसी परीक्षण के मॉड्यूल होते हैं।
चेरी

4
यह कमांड काम करता है !! mvn "-DTest=JoinTeamTestCases#validateJoinTeam" test ध्यान दें कि "-टेस्ट" UPPER CASE 'T' से शुरू होता है।
vikas

25

2.12 के साथ एक मुद्दा है। यह मेरे लिए 2.12 से 2.11 तक मावेन-अस्फ़ेयर-प्लगइन बदलने से होता है:

  1. mvn test -Dtest=DesignRulesTest

    परिणाम:
    [ERROR] लक्ष्य को निष्पादित करने में विफल। org.apache.maven.plugins: maven-Surefire-plugin: 2.12 : परीक्षण (डिफ़ॉल्ट-परीक्षण) प्रोजेक्ट pmd पर: कोई परीक्षण निष्पादित नहीं किया गया था!

  2. mvn test -Dtest=DesignRulesTest

    परिणाम: [INFO] --- मावेन-अचूक-प्लगइन: 2.11 : परीक्षण (डिफ़ॉल्ट-परीक्षण) @ pmd --- ... चल रहा है net.sourceforge.pmd.lang.java.rule.design.DesignRulesRest टेस्ट रन: 5 , विफलताएं: 0, त्रुटियां: 0, छोड़ दिया गया: 4, समय समाप्त: 4.009 सेकंड


5
2.12.1 या बाद में फिर से काम करता है।
yurez

फिक्स्ड "कोई टेस्ट नहीं किया गया!" 2.14 में अपग्रेड करके
अल्फोंक्स

यदि आप उपयोग करते हैं @Category(IntegrationTest.class), तो उपयोग करें -Dit.test=ClassName, अन्यथा आप No tests were executed!नवीनतम प्लगइन संस्करणों के साथ भी प्राप्त करेंगे ।
uvsmtid

16

मैं अपने TestNG के साथ क्या करता हूं, (क्षमा करें, JUnit इस का समर्थन नहीं करता है) परीक्षण के मामले हैं मैं एक समूह को उस परीक्षण को असाइन कर सकता हूं जिसे मैं चलाना चाहता हूं

@Test(groups="broken")

और फिर बस 'mvn -Dgroups = broken' चलाएं।


1
यह एक अच्छा जवाब है। मेरे मामले में, परीक्षण को चलाने की कोशिश की गई थी, लेकिन कुछ सीम घटकों को ठीक से सेट नहीं किया गया था, इसलिए ऐसा लगता है कि यह सेटअप कोड के कुछ हिस्से को भी छोड़ रहा है।
क्रिस विलियम्स

1
सही बात। आपको या तो अपने @BeforeMethod में समूहों को तोड़ना है या तोड़ना है, या @BeforeMethod (alwaysRun = true) करना है
ट्यूनार्च

कृपया मुझे बताएं कि यहां समूह क्या है, क्योंकि मुझे संकलन मुद्दा मिल रहा है।
परमेश कोरकुट्टी

14

एकल टेस्ट क्लास में 2.7.3 संस्करण के साथ तरीकों का एक सेट चलाना, आप केवल एक टेस्ट क्लास में एन टेस्ट चला सकते हैं।

नोट: यह junit 4.x और TestNG के लिए समर्थित है।

आपको निम्न सिंटैक्स का उपयोग करना चाहिए

mvn -Dtest=TestCircle#mytest test

आप पैटर्न का भी उपयोग कर सकते हैं

mvn -Dtest=TestCircle#test* test

2.12.1 अचूक के रूप में, आप कई तरीकों का चयन कर सकते हैं (केवल इस समय JUnit4X, पैच का स्वागत है)

mvn -Dtest=TestCircle#testOne+testTwo test

एकल परीक्षणों के बारे में इस लिंक की जाँच करें


2
मेरे मामले में मुझे डबल क्लिक करने के लिए TestClass # टेस्ट का नाम mvan -Destest = "TestCircle # myTest" टेस्ट
प्रतिक खडलू

@PratikKhadloya किसी भी विचार यह निर्भर परीक्षणों के लिए कैसे काम करता है? कहो, मेरे पास टेस्ट 1 (टेस्ट), टेस्ट 2 (), टेस्ट 3 () टेस्टक्लास में तरीके और टेस्ट 2 टेस्ट 1 पर निर्भर करता है। मैं सिर्फ टेस्ट 2 () कैसे चला सकता हूं?
ज़िसका

3
मुझे लगता है कि यदि आपके परीक्षणों में निर्भरता है, तो आप कुछ गलत कर रहे हैं। प्रत्येक परीक्षण अन्य परीक्षणों से स्वतंत्र होना चाहिए। आपको उनके बीच युग्मन को हटाने की आवश्यकता है।
प्रतीक खदलोया

11

आप निम्न सिंटैक्स का उपयोग करके विशिष्ट परीक्षण वर्ग (तों) और विधि (एस) चला सकते हैं:

  1. पूरा पैकेज: mvan test -Destest = "com.oracle.tests। **"

  2. कक्षा में सभी विधि: mvan test -Dtest = CLASS_NAME1

  3. एकल वर्ग से एकल विधि: mvan test -Dtest = CLASS_NAME1 # METHOD_NAME1

  4. एकाधिक वर्ग से कई विधि: mvan test -Dtest = CLASS_NAME1 # METHOD_NAME1, CLASS_NAME2 # METHOD_NAME2


10

यह कमांड काम करता है !! mvn "-DTest=JoinTeamTestCases#validateJoinTeam" testध्यान दें कि "-टेस्ट" UPPER CASE 'T' से शुरू होता है।


4
SureFire 2.18.x के साथ काम नहीं करता है ; यह सिर्फ सभी परीक्षण चलाता है।
जनक बंदारा

4

परीक्षण पैरामीटर tobrien ने उल्लेख आप एक विधि एक का उपयोग कर निर्दिष्ट कर सकते हैं # विधि नाम से पहले। यह JUnit और TestNG के लिए काम करना चाहिए। मैंने कभी इसकी कोशिश नहीं की, बस इसे अचूक प्लगिन पेज पर पढ़ें :

इस पैरामीटर को फ़ाइल नाम से अलग-अलग परीक्षण चलाने के लिए निर्दिष्ट करें, जिसमें शामिल / शामिल पैरामीटर को ओवरराइड करना शामिल है। आपके द्वारा यहाँ निर्दिष्ट प्रत्येक पैटर्न का उपयोग ** / $ {test} .java जैसे स्वरूपित एक पैटर्न बनाने के लिए किया जाएगा, इसलिए आप "foo / MyTest .java" नामक एकल परीक्षण चलाने के लिए "-Destest = MyTest" टाइप कर सकते हैं। इस पैरामीटर में ओवरराइड शामिल हैं / पैरामीटर शामिल हैं, और TestNG SuiteXmlFiles पैरामीटर। 2.7.3 के बाद से आप #myMethod या # my * एथोड जोड़ने के साथ टेस्ट में सीमित संख्या में विधि का निष्पादन कर सकते हैं। सी टाइप "-स्टेस्ट = मायटेस्ट # मायमेथोड" जूनिट 4.x और टेस्टनेग के लिए समर्थित है


3

JUnit के नए संस्करणों में श्रेणियाँ धावक शामिल हैं: http://kentbeck.github.com/junit/doc/ReleaseNotes4.8.html

लेकिन JUnit की रिलीज़ प्रक्रिया मावेन आधारित नहीं है, इसलिए मावेन उपयोगकर्ताओं को इसे अपने रिपॉजिटरी में मैन्युअल रूप से डालना होगा।


1
अच्छा लगा। लेकिन मैं यह नहीं देखता कि यह सवाल का जवाब कैसे देता है।
पास्कल थिवेंट

2
सबज को 2.7.3 वर्जन से मावेन
Andriy Plokhotnyj

3

अचूक प्लगइन संस्करण के रूप में 2.22.1 (संभवतः पहले) आप testng.xml का उपयोग करते समय टेस्टनामेस संपत्ति का उपयोग करके एकल परीक्षण चला सकते हैं

निम्नलिखित testng.xml दिया गया

<?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 के साथ

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

कमांड लाइन से

mvn clean test -DselectedTests=run-B-test

आगे पढ़ने - परीक्षण का उपयोग कर मावेन अचूक प्लगइन


-5

आप एक ही टेस्ट क्लास चला सकते हैं, लेकिन टेस्ट क्लास के भीतर एक भी तरीका नहीं। आप कक्षा के साधारण नाम का उपयोग करते हैं न कि पूरी तरह से कक्षा के योग्य नाम का। इसलिए, यदि आपके पास "org.sonatype.test.MyTest" में परीक्षण है और केवल वही परीक्षण है जिसे आप चलाना चाहते हैं, तो आपकी कमांड लाइन इस तरह दिखाई देगी:

mvn test -Dtest=MyTest

मैंने एकल मॉड्यूल परियोजना में पिछली टिप्पणियों पर वर्णित समाधान का परीक्षण किया, इसलिए यह टिप्पणी जो कह रही है वह सच नहीं है।
टोनियो

5
यह 2009 में सही हो सकता है जब मूल रूप से उत्तर दिया गया हो।
15

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.