2012-05-10 37 views
5

मैंने जुनीट के लिए एक सरल रनलिस्टर लिखा जो मैवेन के साथ काफी अच्छी तरह से काम करता है। मैं के माध्यम सेमैं ग्रहण में जुनीट रनलिस्टर का उपयोग कैसे कर सकता हूं?

<properties> 
    <property> 
     <name>listener</name> 
     <value>com.asml.lcp.middleware.common.jboss.test.tps.TestDocumentationListener</value> 
    </property> 
</properties> 

Maven-फेल सेफ-प्लगइन के लिए यह रजिस्टर और श्रोता से सही उत्पादन देख सकता था।

अब जब मैं परीक्षण चलाता हूं, तो मैं उसी आउटपुट को देखने के लिए एक्लिप्स में एक ही रनलिस्टर को पंजीकृत करना चाहता हूं।

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

उत्तर

1

हां, यह संभव है। असल में आपको अपना खुद का धावक और रन विधि के अंदर लागू करना होगा, आप एक कस्टम रन श्रोता जोड़ सकते हैं। मैं इस बाहर this post के आधार पर, बिंदु 2.

यहाँ लगा है मेरी श्रोता

public class TestLogger extends RunListener 
{ 
    public void testFinished(Description description) 
    { 
     System.out.println("Successful " + description.getMethodName()); 
    } 
} 

और यहाँ मेरी धावक

public class TestRunner extends BlockJUnit4ClassRunner 
{ 
    public TestRunner(Class<?> klass) throws InitializationError 
    { 
     super(klass); 
    } 

    @Override 
    public void run(RunNotifier notifier) 
    { 
     notifier.addListener(new TestLogger()); // THIS IS THE IMPORTANT LINE 
     super.run(notifier); 
    } 
} 

है और यहाँ मेरे वास्तविक JUnit परीक्षण है

@RunWith(TestRunner.class)   // THIS LINE IS ALSO IMPORTANT 
public class MyTest1 
{ 
    @Test 
    public void Test1() throws Exception 
    { 
     if (Math.random() < .5) throw new Exception("ouch"); 
     assertFalse(Math.random() < .5); 
    } 
}  

आप एक्लिप्स में संदर्भ मेनू का उपयोग कर MyTest1 या Test1 विधि चला सकते हैं और यह आवेदक करेगा परीक्षण लॉगर जैसा आप उम्मीद करेंगे।

+1

यह वही नहीं है जो मैंने देखा था, क्योंकि मैं लॉगिंग के लिए परीक्षण कार्यान्वयन की जटिलता में वृद्धि नहीं करना चाहता हूं। मैं परीक्षणों के बाहर लॉगिंग जोड़ना चाहता था, लेकिन समाधान अभी तक सबसे अच्छा है और अंत में परिणाम वांछित है। मैं इस जवाब को समाधान के रूप में चिह्नित करता हूं। –

0

मैंने इस पर कुछ और शोध किया। जहां तक ​​मैं अब देख सकता हूं, रन श्रोता भी जोड़ने का कोई तरीका नहीं है, जुनीट ग्रहण में भी चलता है।

+1

मैं इससे बेहद निराश हूं। –

2

मेरे पास परीक्षणों का एक सेट है जिसे निष्पादित करने के लिए डेटाबेस की आवश्यकता होती है। मैं उनके निष्पादन की शुरुआत में डेटाबेस बनाना चाहता हूं और अंत में इसे हटा देना चाहता हूं।

मैवेन से मैंने मेवेन-सिक्योरफायर-प्लगइन में रनलिस्टर भी जोड़ा है और यह ठीक काम करता है। और मैंने ismaven नामक सिस्टम प्रॉपर्टी वैरिएबल भी जोड़ा है। जब मैं मेवेन से परीक्षण निष्पादित करता हूं तो यह चर प्रारंभ होता है लेकिन जब मैं ग्रहण से परीक्षण निष्पादित करता हूं, तो यह चर शून्य है (मैं सिस्टम.getप्रोपर्टी के साथ चर के लिए उपयोग करता हूं)।

<configuration> 
    <properties> 
    <property> 
     <name>listener</name> 
     <value>com.mycompany.MyRunListener</value> 
    </property> 
    </properties> 
    <systemPropertyVariables> 
    <ismaven>true</ismaven> 
    </systemPropertyVariables> 
</configuration> 

मेरे सभी डेटाबेस परीक्षण एक वर्ग है कि एक @BeforeClass और एक @AfterClass तरीकों है से विरासत। ये विधियां जांचें कि क्या मेवेन द्वारा परीक्षण किया जा रहा है या ग्रहण ismaven संपत्ति के मूल्य की जांच कर रहा है। यदि परीक्षण मेवेन द्वारा निष्पादित किया जा रहा है, ismaven संपत्ति का मूल्य है और वे कुछ भी करते हैं। लेकिन परीक्षण, ग्रहण द्वारा क्रियान्वित की जा रही है है ismaven चर रिक्त है और वे (@BeforeClass) शुरू होता है या बंद हो जाता है (@AfterClass) डेटाबेस:

@BeforeClass 
public static void checkIfStartDatabase() { 
    String ismaven = System.getProperty("ismaven"); 
    // If it is not maven, start the database 
    if (ismaven == null) { 
    startDatabase(); 
    } 
} 

@AfterClass 
public static void checkIfStopDatabase() { 
    String ismaven = System.getProperty("ismaven"); 
    // If it is not maven, stop the database 
    if (ismaven == null) { 
    stopDatabase(); 
    } 
} 

यह समाधान 100% का समाधान नहीं करता अपने समस्या लेकिन यदि आप इसे कार्यान्वित करते हैं तो आप एक्लिप्स का उपयोग करके एक जुनीट कक्षा के सभी परीक्षणों को निष्पादित (और डीबग) कर सकते हैं और आप गारंटी के साथ मेवेन का उपयोग करके अपने प्रोजेक्ट के सभी परीक्षणों को निष्पादित कर सकते हैं कि आप कोड के एक टुकड़े को एक बार निष्पादित करेंगे या अपने सभी परीक्षणों के निष्पादन के बाद।