वैश्विक रूप से उन्हें अक्षम करने के लिए, जुनीट (4.5+) के दो तरीके हैं एक नई विधि का उपयोग करने के लिए है। यदि आप इसे टेस्ट क्लास के @BeforeClass (या @Before) में डालते हैं, और यदि स्थिति विफल हो जाती है, तो यह परीक्षण को अनदेखा कर देगी। इस स्थिति में आप एक सिस्टम प्रॉपर्टी या कुछ और डाल सकते हैं जिसे वैश्विक स्तर पर सेट या बंद किया जा सकता है।
दूसरा विकल्प एक कस्टम धावक बनाना है जो वैश्विक संपत्ति और प्रतिनिधियों को उपयुक्त धावक को समझता है। यह दृष्टिकोण बहुत अधिक भंगुर है (चूंकि जुनीट 4 आंतरिक धावक अस्थिर हैं और रिलीज से रिलीज होने के लिए बदला जा सकता है), लेकिन इसका एक वर्ग पदानुक्रम में विरासत में शामिल होने और उप-वर्ग में ओवरराइड होने का लाभ है। यदि आपको विरासत JUnit38 कक्षाओं का समर्थन करना है तो यह ऐसा करने का एकमात्र यथार्थवादी तरीका भी है।
कस्टम रनर करने के लिए यहां कुछ कोड दिया गया है। क्या प्राप्त होता है इसके बारे में AppropriateRunnerForClass कर सकता है, जिस तरह से मैंने इसे लागू किया था, एक अलग एनोटेशन होना था जो कस्टम धावक को क्या चलाना है, बताता है। एकमात्र विकल्प जुनीट कोड से कुछ बहुत ही भंगुर प्रतिलिपि पेस्ट था।
private class CustomRunner implements Runner
private Runner runner;
public CustomRunner(Class<?> klass, RunnerBuilder builder) throws Throwable {
if (!isRunCustomTests()) {
runner = new IgnoredClassRunner(klass);
} else {
runner = getAppropriateRunnerForClass(klass, builder);
}
public Description getDescription() {
return runner.getDescription();
}
public void run(RunNotifier notifier) {
runner.run(notifier);
}
}
संपादित करें: @RunWith टैग केवल पूरी कक्षा के लिए काम करता है। उस सीमा के आसपास काम करने का एक तरीका है परीक्षण विधियों को एक स्थिर आंतरिक कक्षा में स्थानांतरित करना और उसे एनोटेट करना। इस तरह आपको कक्षा के संगठन के साथ एनोटेशन का लाभ है। लेकिन, ऐसा करने से किसी भी @ पहले या @BeforeClass टैग में मदद नहीं मिलेगी, आपको आंतरिक कक्षा में उन्हें फिर से बनाना होगा। यह बाहरी वर्ग की विधि को कॉल कर सकता है, लेकिन इसे हुक के रूप में अपना स्वयं का तरीका रखना होगा।
संबंधित: http://stackoverflow.com/questions/457276/junit4-test-suites/4952225#4952225 – cmcginty
'@ रनविथ 'और' @ सुइट क्लासेस 'बिल्कुल अच्छा नहीं है, http: // stackoverflow पर देखें। कॉम/प्रश्न/18894951 – Val
आईएमएचओ, दूसरा जवाब स्वीकार्य उत्तर होना चाहिए - जूनिट 4.8 – Srikanth