कमांड लाइन का उपयोग करके JUnit वर्ग से एकल परीक्षण चलाएं


95

मैं एक ऐसा तरीका खोजने की कोशिश कर रहा हूं जो मुझे केवल कमांड-लाइन और जावा का उपयोग करके एक JUnit वर्ग से एकल परीक्षण चलाने की अनुमति देगा।

मैं निम्नलिखित का उपयोग करके कक्षा से परीक्षणों का पूरा सेट चला सकता हूं:

java -cp .... org.junit.runner.JUnitCore org.package.classname

मैं वास्तव में ऐसा करना चाहता हूं:

java -cp .... org.junit.runner.JUnitCore org.package.classname.method

या:

java -cp .... org.junit.runner.JUnitCore org.package.classname#method

मैंने देखा कि JUnit एनोटेशन का उपयोग करके ऐसा करने के तरीके हो सकते हैं, लेकिन मैं अपने परीक्षण वर्गों के स्रोत को हाथ से संशोधित नहीं करना पसंद करूंगा (इसे स्वचालित करने का प्रयास)। मैंने यह भी देखा कि मावेन के पास ऐसा करने का एक तरीका हो सकता है, लेकिन यदि संभव हो तो मैं मावेन के आधार पर बचना चाहूंगा।

इसलिए मैं सोच रहा हूं कि क्या ऐसा करने का कोई तरीका है?


मुख्य बिंदु जिनकी मुझे तलाश है:

  • JUnit परीक्षण वर्ग से एकल परीक्षण चलाने की क्षमता
  • कमांड लाइन (JUnit का उपयोग करके)
  • परीक्षण स्रोत को संशोधित करने से बचें
  • अतिरिक्त उपकरणों के उपयोग से बचें

4
कूल, एक और "यूनिक्स मेरी आईडीई है" टाइप उत्साही। मैं एक संपादक के लिए एक आईडीई का उपयोग करना पसंद करता हूं (विशेष रूप से नेटबीन्स के लिए वीआईएम प्लगइन के साथ), लेकिन मैं सहमत हूं कि छोटे तेज उपकरण जो "हमेशा के लिए" रहते हैं, और उन्हें मनमाने ढंग से कॉन्फ़िगरेशन में इकट्ठा किया जा सकता है, लगातार जारी रहने वाले एस्कॉटिक फीचर्स से लगातार बेहतर होते हैं। आईडीई ब्रांडों और संस्करणों की श्रृंखला। आपके लिए अच्छा हैं!
रोबोप्रोग

2
आपने कहा कि आप मावेन से बचना चाहते थे। मावेन
reevesy

जवाबों:


79

आप एक कस्टम, नंगे पैर JUnit धावक काफी आसानी से कर सकते हैं। यहाँ एक है कि फार्म में एक एकल परीक्षण विधि चलेगा com.package.TestClass#methodName:

import org.junit.runner.JUnitCore;
import org.junit.runner.Request;
import org.junit.runner.Result;

public class SingleJUnitTestRunner {
    public static void main(String... args) throws ClassNotFoundException {
        String[] classAndMethod = args[0].split("#");
        Request request = Request.method(Class.forName(classAndMethod[0]),
                classAndMethod[1]);

        Result result = new JUnitCore().run(request);
        System.exit(result.wasSuccessful() ? 0 : 1);
    }
}

आप इसे इस तरह से लागू कर सकते हैं:

> java -cp path/to/testclasses:path/to/junit-4.8.2.jar SingleJUnitTestRunner 
    com.mycompany.product.MyTest#testB

JUnit स्रोत में त्वरित रूप से देखने के बाद मैं इस निष्कर्ष पर पहुंचा कि आप JUnit इस मूल का समर्थन नहीं करते हैं। यह मेरे लिए कभी भी समस्या नहीं रहा है क्योंकि आईडीई के पास सभी कस्टम JUnit एकीकरण हैं जो आपको कर्सर को परीक्षण विधि को अन्य कार्यों के बीच चलाने की अनुमति देते हैं। मैंने कमांड लाइन से सीधे JUnit परीक्षण नहीं चलाया है; मैंने हमेशा IDE या बिल्ड टूल (Ant, Maven) का ध्यान रखा है। विशेष रूप से चूंकि डिफ़ॉल्ट सीएलआई प्रवेश बिंदु (JUnitCore) परीक्षण विफलता (एस) पर एक गैर-शून्य निकास कोड के अलावा किसी भी परिणाम आउटपुट का उत्पादन नहीं करता है।

नोट: JUnit संस्करण> = 4.9 के लिए आपको क्लासपैथ में हैमरेस्ट लाइब्रेरी की आवश्यकता है


2
वास्तव में, मुझे याद है कि लॉग में एक पूर्ण स्टैक ट्रेस प्राप्त करना याद है जब एक परीक्षण में एक असफलता, साथ ही साथ (वैकल्पिक, जब परिभाषित) संदेश प्रत्येक दावे से अवास्तविक अपेक्षा का वर्णन करता है। काम के लिए धन्यवाद-आसपास।
रोबोप्रोग

48

मैं अपने प्रोजेक्ट का निर्माण करने के लिए मावेन का उपयोग करता हूं, और जूनियर टेस्ट चलाने के लिए श्योरफेयर मावेन प्लगइन का उपयोग करता हूं। बशर्ते आपके पास यह सेटअप हो, तो आप कर सकते हैं:

mvn -Dtest=GreatTestClass#testMethod test

इस उदाहरण में, हम क्लास "ग्रेटटेक्लास" के भीतर "टेस्टमेथोड" नामक एक परीक्षण विधि चलाते हैं।

अधिक जानकारी के लिए, http://maven.apache.org/surefire/maven-surefire-plugin/examples/single-test.html देखें।


-2

हमने IntelliJ का उपयोग किया, और इसे जानने के लिए भी काफी समय बिताया।

असल में, इसमें 2 चरण शामिल हैं:

चरण 1: टेस्ट क्लास संकलित करें

% javac -cp .:"/Applications/IntelliJ IDEA 13 CE.app/Contents/lib/*" SetTest.java

चरण 2: टेस्ट चलाएं

% java -cp .:"/Applications/IntelliJ IDEA 13 CE.app/Contents/lib/*" org.junit.runner.JUnitCore SetTest


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