2009-03-23 14 views
92

में "कोई रनने योग्य विधियों" से बचने के लिए कैसे मैंने JUnit3.8 से JUnit4.4 पर स्विच किया है। मैं चींटी का उपयोग करके अपने परीक्षण चलाता हूं, मेरे सभी परीक्षण सफलतापूर्वक चलते हैं लेकिन परीक्षण उपयोगिता वर्ग "कोई रनने योग्य विधियों" त्रुटि के साथ विफल हो जाते हैं। मैं जिस पैटर्न का उपयोग कर रहा हूं वह है टेस्ट फ़ोल्डर के तहत नाम * टेस्ट * के साथ सभी वर्गों को शामिल करना।जुनीट: टेस्ट यूटिल क्लास

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

जुनीट 3.8 में यह कोई समस्या नहीं थी क्योंकि इन उपयोगिता वर्गों ने टेस्टकेस का विस्तार नहीं किया था इसलिए धावक ने उन्हें निष्पादित करने की कोशिश नहीं की थी।

मुझे पता है कि मैं इन विशिष्ट वर्गों को चींटी स्क्रिप्ट में जूनिट लक्ष्य में बहिष्कृत कर सकता हूं। लेकिन मैं अपनी नई हर यूटिलिटी क्लास में बिल्ड फाइल को बदलना नहीं चाहता हूं। मैं कक्षाओं का नाम भी बदल सकता हूं (लेकिन वर्गों के लिए अच्छे नाम देना हमेशा मेरी सबसे कमजोर प्रतिभा थी :-))

क्या इस समस्या के लिए कोई सुरुचिपूर्ण समाधान है?

+0

क्या आपके परीक्षण एक्लिप्स/नेटबीन/आपके पसंदीदा आईडीई में काम करते हैं? – guerda

+0

मैं ग्रहण का उपयोग करता हूं। वास्तव में वहां कोई समस्या नहीं है, किसी भी तरह ग्रहण इन कक्षाओं को चलाने की कोशिश नहीं करता है। मुझे आश्चर्य है कि कैसे? – LiorH

+0

मुझे नहीं पता कि हम आपके प्रश्न को समझ चुके हैं या नहीं। कृपया अपना प्रश्न दोबारा पढ़ें और शायद कुछ और जानकारी जोड़ें। – guerda

उत्तर

41

मान लें कि आप टेस्ट क्लास खोजने के लिए प्रयुक्त पैटर्न के नियंत्रण में हैं, मैं *Test* के बजाय *Test से मिलान करने के लिए इसे बदलने का सुझाव दूंगा। इस तरह TestHelper मिलान नहीं होगा, लेकिन FooTest होगा।

+1

मुझे नहीं लगता कि इससे मदद मिलेगी, क्योंकि वह जुनीट 4.4 में चले गए थे और इससे कोई फर्क नहीं पड़ता। – guerda

+2

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

+1

आपका सुझाव मान्य है, हालांकि मैंने अपने परीक्षण कक्षाओं की जांच की और कुछ टेस्ट के साथ शुरूआत और टेस्ट के साथ कुछ अंत। उपयोगिता वर्गों और वास्तविक परीक्षण कक्षाओं के बीच कोई स्पष्ट अंतर नहीं है। क्या आपको लगता है कि आपके द्वारा सुझाए गए सम्मेलन का एक अच्छा अभ्यास है? (यानी यूटिल टेस्ट के साथ शुरू होते हैं, और टेस्ट के साथ परीक्षण समाप्त होते हैं) – LiorH

4

इन कक्षाओं में खाली परीक्षण विधि जोड़ने के बारे में क्या?

public void avoidAnnoyingErrorMessageWhenRunningTestsInAnt() { 
    assertTrue(true); // do nothing; 
} 
+0

दिलचस्प, धन्यवाद – LiorH

+6

लेकिन यह हमारे पास परीक्षणों की संख्या को झूठा रूप से बढ़ाता है :) नहीं कि यह एक बड़ा सौदा – Sudarshan

128

अपने उपयोग कक्षाओं को @Ignore के साथ एनोटेट करें। यह जुनीट को परीक्षण के रूप में चलाने और चलाने के लिए नहीं करेगा।

+9

धन्यवाद। यह स्वीकार्य जवाब होना चाहिए! –

+6

वास्तव में, नहीं, यह नहीं होना चाहिए। @Ignore अस्थायी रूप से परीक्षण अक्षम करने के लिए है। –

+1

क्षमा करें, लेकिन यह एक बुरा विचार है। आप टेस्ट से संबंधित एनोटेशन के साथ अपने उत्पादन कोड को एनोटेट करना शुरू करना चाहते हैं क्योंकि वे टेस्ट पैटर्न से मेल खाते हैं? उचित जवाब क्लास नामों को ठीक करना है यदि वे परीक्षण के लिए पैटर्न मिलान को ट्रिगर कर रहे हैं। और सुनिश्चित करें कि पैटर्न केवल कक्षाओं को पाता है जो परीक्षण के साथ अंत। यह एक सामान्य स्वीकार्य पैटर्न –

70

मेरे विशिष्ट मामले में निम्नलिखित परिदृश्य है। हमारे परीक्षण

public class VenueResourceContainerTest extends BaseTixContainerTest 

सभी

BaseTixContainerTest 

का विस्तार करने और JUnit BaseTixContainerTest को चलाने के लिए कोशिश कर रहा था। गरीब बेसटिक्सकॉन्टेनरटेस्ट बस कंटेनर सेट करने, क्लाइंट को सेटअप करने, कुछ पिज्जा ऑर्डर करने और आराम करने की कोशिश कर रहा था ... आदमी।

जैसा कि पहले उल्लेख, आप

@Ignore 

साथ वर्ग टिप्पणी कर सकते हैं लेकिन यह (के रूप में पूरी तरह से नजरअंदाज कर दिया के खिलाफ) है कि परीक्षण रिपोर्ट करने के लिए के रूप में छोड़ दिया JUnit का कारण बना।

Tests run: 4, Failures: 0, Errors: 0, Skipped: 1 

उस तरह की परेशान मुझे।

इसलिए मैंने बेसटिक्सकंटैनरटेस्ट सार बनाया, और अब जुनीट वास्तव में इसे अनदेखा करता है।

Tests run: 3, Failures: 0, Errors: 0, Skipped: 0 
+5

'@ Ignore' – neworld

+0

से काफी बेहतर यह मेरी समस्या भी हल हो गया, धन्यवाद! – Rumal

+0

मैंने @ इग्नोर दृष्टिकोण और विचार की कोशिश की, अच्छा यह अच्छा है, फिर मैंने यह जवाब पढ़ा और माथे में खुद को थप्पड़ मार दिया, "पाठ्यक्रम *!" – dnuttle

31

अपने परीक्षण आधार वर्ग instantiating से JUnit को रोकने के लिए बस इसे

public abstract class MyTestBaseClass { ... whatever... } 

(@Ignore के रूप में ध्यान नहीं दिया जो मैं अस्थायी रूप से नजरअंदाज कर परीक्षण के लिए आरक्षित यह रिपोर्ट बनाते हैं।)

+2

जुनीट धावक अक्सर अमूर्त वर्गों को तुरंत चालू करने का प्रयास करते हैं, और फिर तत्काल त्रुटि के साथ विफल हो जाते हैं। –

+0

बेस टेस्ट कक्षाओं के लिए मेरे लिए पूरी तरह से काम करता है – ruX

+2

यह सार के कारण काम कर रहा है (यह परीक्षण में समाप्त नहीं होता है), अमूर्त संशोधक की वजह से नहीं। क्लास नाम को MyBaseClassTest में बदलें और यह @HollyCummins (और असफल) – Hutch

0

मुझे कोड के सरल टुकड़े (@Test, @Before आदि का उपयोग करके) के सबसे सरल भाग पर एक समान समस्या ("कोई रनने योग्य विधियां ..") का सामना करना पड़ रहा था और समाधान को कहीं भी नहीं मिला। मैं जूनिट 4 और ग्रहण एसडीके संस्करण 4.1.2 का उपयोग कर रहा था। नवीनतम ग्रहण एसडीके 4.2.2 का उपयोग करके मेरी समस्या का समाधान किया। मुझे उम्मीद है कि यह उन लोगों की मदद करेगा जो कुछ हद तक इसी तरह के मुद्दे से जूझ रहे हैं।

5

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

+1

द्वारा उल्लिखित तत्काल प्रयास करने का प्रयास करेगा, ऐसा लगता है कि 'skipNonTests' विशेषता केवल एंटी 1.9+ में उपलब्ध है, जो शर्म की बात है, क्योंकि यह अविश्वसनीय रूप से उपयोगी लगती है। यह अमूर्त परीक्षण superclasses भी बाहर कर देगा। –

4

@Test के लिए आयात जोड़ने के लिए आईडीई के कोड-पूर्णता का उपयोग करते समय सावधान रहें।

यह import org.junit.Test और import org.testng.annotations.Test नहीं है, उदाहरण के लिए। यदि आप बाद वाले करते हैं, तो आपको "कोई रनने योग्य विधियां" त्रुटि नहीं मिलेगी।

+0

यह एक उत्तर के बजाय एक टिप्पणी होना चाहिए। –

+1

मुझे नहीं पता क्यों। यह एक वैध समाधान है। –

+1

इंटेलिज आइडिया 2017 इसके बजाय 'org.junit.jupiter.api.Test' आयात करके मेरे दिमाग में गड़बड़ कर रहा था! लेकिन आपको धन्यवाद, अब हल हो गया है – AmiNadimi

10
  1. यदि इस उदाहरण के लिए अपने आधार परीक्षण वर्ग है AbstractTest और अपने सभी परीक्षण इस तो के रूप में सार
  2. इस वर्ग को परिभाषित फैली यदि यह util वर्ग तो बेहतर हटाने * वर्ग से टेस्ट का नाम बदलने यह MyTestUtil है या उपयोग आदि
संबंधित मुद्दे