2008-09-30 9 views
14

मैं वर्तमान में जुनीट 4 का उपयोग कर रहा हूं और मेरे परीक्षणों को उन समूहों में विभाजित करने की आवश्यकता है जिन्हें किसी भी संयोजन में चुनिंदा रूप से चलाया जा सकता है। मुझे पता है कि टेस्टएनजी के पास समूहों को असाइन करने के लिए परीक्षणों को एनोटेट करने की सुविधा है, लेकिन मैं अभी टेस्टएनजी में माइग्रेट नहीं कर सकता। ऐसा लगता है कि यह कुछ कस्टम एनोटेशन और एक कस्टम जुनीट टेस्टरनर के साथ जुनीट में आसानी से पूरा किया जा सकता है। मैंने दोनों जुनीट दस्तावेज़ों की जांच की है और वेब की खोज की है लेकिन ऐसी कोई चीज़ नहीं मिल सका। क्या किसी को ऐसे टेस्टरनर के बारे में पता है?क्या परीक्षण के समूह चलाने के लिए एक जुनीट टेस्टरनर है?

अद्यतन: परीक्षण सूट के संबंध में आपके उत्तरों के लिए धन्यवाद। मुझे इन्हें अपने मूल प्रश्न में संबोधित करना चाहिए था। यहां हम जाते हैं: मैं परीक्षण सूट का उपयोग नहीं करना चाहता क्योंकि उन्हें मुझे मैन्युअल रूप से बनाने और प्रबंधित करने की आवश्यकता होगी, जिसका अर्थ है कि मेरे सभी परीक्षणों को छूना और उन्हें सूट में मैन्युअल रूप से व्यवस्थित करना (बहुत अधिक काम और रखरखाव दुःस्वप्न)। मुझे बस इतना करना है कि सभी यूनिट परीक्षण चलाएं, कुछ ऐसे हैं जो वास्तव में एकीकरण परीक्षण हैं। इसलिए मैं इन्हें एनोटेट करना चाहता हूं, और अन्य सभी को चलाता हूं। दूसरी बार, मैं केवल एकीकरण परीक्षण चलाने के लिए चाहता हूँ। मुझे यूनिट परीक्षण को कई समूहों में रखने की आवश्यकता भी है, जो सूट के साथ संभव नहीं है। उम्मीद है कि यह चीजों को साफ़ करने में मदद करता है।

अद्यतन 2: यदि जुनीट में यह ओओबी नहीं है, तो मैं एक ओपन सोर्स लाइब्रेरी की तलाश में हूं जो इसे जुनीट (एनोटेशन + कस्टम जुनीट टेस्ट रनर) में जोड़ता है।

+0

संबंधित: http://stackoverflow.com/questions/457276/junit4-test-suites/4952225#4952225 – cmcginty

उत्तर

6

वसंत के SpringJUnit4ClassRunner देखें। मैंने इसे IfProfileValue एनोटेशन का उपयोग करके, सिस्टम प्रॉपर्टी के आधार पर वैकल्पिक रूप से परीक्षण चलाने के लिए उपयोग किया है।

यह:

@IfProfileValue(name="test-groups", values={"unit-tests", "integration-tests"}) 
    public void testWhichRunsForUnitOrIntegrationTestGroups() { 
     // ... 
} 

सिस्टम संपत्ति 'test-समूह' या तो 'यूनिट-परीक्षण' या 'एकीकरण-परीक्षण' पर सेट है, तो चलेगा।

अद्यतन: JUnitExt में @Category और @Prerequisite एनोटेशन हैं और ऐसा लगता है कि आपको जो चाहिए वह करना चाहिए। हालांकि, मैंने इसे कभी भी इस्तेमाल नहीं किया है, इसलिए मैं इसके लिए झुकाव नहीं कर सकता।

+0

धन्यवाद, ये दोनों आशाजनक दिखते हैं। मैं उन्हें देख लूंगा। – thvo

+0

SpringJUnit4ClassRunner काम करता होगा, लेकिन हम वसंत के पुराने संस्करण का उपयोग कर रहे हैं जिसमें यह नहीं है। जब तक हम अपडेट नहीं करते हैं (यह एक बड़ी परियोजना में आसान नहीं है), मैं इस विधि का उपयोग नहीं कर सकता। – thvo

+0

नोट: वसंत '@ IfProfileValue' केवल ** स्किप्स/अनदेखा ** परीक्षण अगर नाम और मान मेल नहीं खाता है और यह ** ** इसे नहीं चलाता है। यदि आप इसके साथ जुनीट श्रेणियों के कार्यान्वयन को कार्यान्वित करना चाहते हैं तो आपको _ignoring_ के बजाय 'springJUnit4ClassRunner # runChild' को _not-run_ तक विस्तारित करने की आवश्यकता हो सकती है। यह मुख्य रूप से मायने रखता है अगर इसके परिणाम जेनकींस में हैं। – raksja

0

आप सूट बना सकते हैं, हालांकि यह सूट में सभी कॉन्फ़िगरेशन रखता है, न कि एनोटेशन में।

0

जुनीट 3 आपको टेस्ट-सूट बनाने की अनुमति देता है जिसे किसी भी अन्य परीक्षण की तरह चलाया जा सकता है। क्या जुनीट 4 की एक समान अवधारणा नहीं है?

0

यदि आप एएनटी या मेवेन का उपयोग कर रहे हैं, तो आप नियंत्रित कर सकते हैं कि परीक्षण द्वारा परीक्षणों को फ़िल्टर करके कौन से परीक्षण चलाए जाते हैं। थोड़ा अजीब, लेकिन यह आपके लिए काम कर सकता है।

1

नहीं, दुर्भाग्यवश, टेस्टएनजी समूहों के लिए कोई समान अवधारणा नहीं है। यह जुनीट 4 के लिए योजना बनाई गई थी, लेकिन कुछ अस्पष्ट कारणों से, इसे योजना से हटा दिया गया था।

11

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

+0

धन्यवाद केंट, आपने अंतर्निहित मुद्दे को इंगित करने वाले सिर पर नाखून मारा; यह सुनकर बहुत अच्छा लगा कि इसे अगले जुनीट रिलीज में संबोधित किया जाएगा। आप यह भी सही हैं कि इस तरह के फ़िल्टर को लिखने का मेरा रैंप-अप समय आपके मुकाबले थोडा लंबा हो सकता है, बशर्ते आपने जुनीट को सह-लेखन किया :) मैं इसे देख लूंगा। – thvo

+0

यहां फ़िल्टर क्लास जावाडॉक का एक लिंक है: http://junit.sourceforge.net/javadoc/org/junit/runner/manipulation/Filter.html – thvo

3

सबसे पहले, आप दो समस्याओं को संबोधित कर रहे हैं - इकाई परीक्षण (अक्सर परीक्षण के तहत इकाई के समान पैकेज में) और एकीकरण परीक्षण। मैं आमतौर पर एक अलग पैकेज में अपने एकीकरण परीक्षण रखता हूं, com.example.project.tests जैसे कुछ। ग्रहण में, अपनी परियोजनाओं की तरह लग रहे:

project/ 
    src/ 
    com.example.project/ 
    tsrc/ 
    com.example.project/ 
    com.example.project.tests/ 

एक पैकेज पर दायाँ क्लिक करके और 'रन' का चयन पैकेज में परीक्षण चलाता है; स्रोत फ़ोल्डर पर ऐसा करने से सभी परीक्षण चलते हैं।

आप एक समान प्रभाव को प्राप्त कर सकते हैं, हालांकि आपने Suite runner का उपयोग करके इसमें कोई रूचि व्यक्त की है। हालांकि, यह DRY का उल्लंघन करता है - आपको सुइट कक्षाओं में परीक्षण नामों की प्रतियां अद्यतित रखना होगा। हालांकि, आप आसानी से एक ही परीक्षण एकाधिक सूट में डाल सकते हैं।

@RunWith(Suite.class) 
@Suite.SuiteClasses({ 
    TestAlpha.class, 
    TestBeta.class }) 
public class GreekLetterUnitTests { 
} 

बेशक, मुझे वास्तव में इन चीजों को स्वचालित रखना चाहिए। ऐसा करने के लिए एक अच्छी विधि the Ant task का उपयोग करना है।

<target name="tests.unit"> 
    <junit> 
    <batchtest> 
     <fileset dir="tsrc"> 
     <include name="**/Test*.java"/> 
     <exclude name="**/tests/*.java"/> 
     </fileset> 
    </batchtest> 
    </junit> 
</target> 
<target name="tests.integration"> 
    <junit> 
    <batchtest> 
     <fileset dir="tsrc"> 
     <include name="**/tests/Test*.java"/> 
     </fileset> 
    </batchtest> 
    </junit> 
</target> 
0

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

मैं अत्यधिक जुनीट पर इसकी अनुशंसा करता हूं।

0

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

संबंधित मुद्दे