java - जुनीट:परीक्षण यूटिल कक्षाओं में "कोई रनने योग्य तरीकों" से कैसे बचें




ant junit testing (9)

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

public class VenueResourceContainerTest extends BaseTixContainerTest

सब विस्तारित

BaseTixContainerTest

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

जैसा कि पहले उल्लेख किया गया है, आप कक्षा को एनोटेट कर सकते हैं

@Ignore

लेकिन इसने जुनीट को उस परीक्षा को छोड़ने के लिए प्रेरित किया (जैसा कि पूरी तरह से अनदेखा किया गया था)।

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

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

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

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

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

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

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

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

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


यदि आपकी परीक्षा कक्षा में लिखा गया है तो org.junit.jupiter.api.Test; इसे हटाएं और आयात org.junit.Test लिखें; इस मामले में यह भी मुझे काम किया।


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


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


जुनीट को अपनी टेस्ट बेस क्लास को तुरंत चालू करने से रोकने के लिए बस इसे बनाएं

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

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


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

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


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

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


भेद इतना आसान है:

  • TestCase का विस्तार करना जिस तरह यूनिट परीक्षण जुनीट 3 में लिखा गया था (बेशक यह अभी भी जुनीट 4 में समर्थित है)
  • @Test एनोटेशन का उपयोग करके @Test 4 द्वारा पेश किया गया तरीका है

आम तौर पर आपको एनोटेशन पथ चुनना चाहिए, जब तक कि जुनीट 3 (और / या जावा 5 से पहले जावा संस्करण) की संगतता की आवश्यकता न हो। नए तरीके के कई फायदे हैं:

  • @Test annotaton अधिक स्पष्ट है और टूल में समर्थन करना आसान है (उदाहरण के लिए इस तरह के सभी परीक्षणों को खोजना आसान है)
  • @After / @AfterClass और @After / @AfterClass साथ कई विधियों को एनोटेट किया जा सकता है और अधिक लचीलापन प्रदान करता है
  • ExpectedException जैसी चीजों पर @Rule एनोटेशन के लिए समर्थन
  • @Ignored एनोटेशन के लिए समर्थन
  • @RunWith का उपयोग कर वैकल्पिक परीक्षण धावकों के लिए समर्थन

जुनीट 3 TestCase में अपेक्षित अपवादों का परीक्षण करने के लिए आपको टेक्स्ट को स्पष्ट करना होगा।

public void testMyException() {
  try {
    objectUnderTest.myMethod(EVIL_ARGUMENT);
    fail("myMethod did not throw an Exception!");
  } catch (MyException e) {
    // ok!
    // check for properties of exception here, if desired
  }
}




java ant junit testing