उत्तर कस्टम org.testng.IMethodSelector के माध्यम से है:
इसकी includeMethod() सार्वजनिक रूप से एनोटेटेड विधि की तरह, हम चाहते हैं कि किसी भी विधि को बाहर कर सकते हैं।
हालांकि, कस्टम जावा विधि चयनकर्ता को पंजीकृत करने के लिए, आपको इसे किसी भी testRunner द्वारा प्रबंधित XMLTest उदाहरण में जोड़ना होगा, जिसका अर्थ है कि आपको अपने कस्टम TestRunner ।
लेकिन, एक कस्टम TestRunner बनाने के लिए, आपको -testestunfactory विकल्प के माध्यम से TestRunnerFactory को पंजीकृत करने की आवश्यकता है।
लेकिन यह है कि- testrunfactory को TestNG वर्ग द्वारा कभी भी ध्यान में नहीं रखा जाता है ... इसलिए आपको एक कस्टम टेस्टएनजी कक्षा को परिभाषित करने की भी आवश्यकता है:
- कॉन्फ़िगर (मानचित्र) विधि को ओवरराइड करने के लिए,
- ताकि आप वास्तव में TestRunnerFactory
सेट कर सकें
- TestRunnerFactory जो आपको एक कस्टम TestRunner का निर्माण करेगा,
- TestRunner जो XMLTest उदाहरण को एक कस्टम XMLMethodSelector
पर सेट करेगा
- XMLMethodSelector जो एक कस्टम IMethodSelector
का निर्माण करेगा
- IMethodSelector जो आपके चयन के किसी भी टेस्टएनजी विधियों को बाहर कर देगा!
ठीक है ... यह एक दुःस्वप्न है। लेकिन यह एक कोड-चुनौती भी है, इसलिए यह थोड़ा चुनौतीपूर्ण होना चाहिए;)
सभी कोड DZone स्निपेट पर उपलब्ध हैं।
एक कोड चुनौती के लिए हमेशा की तरह:
- एक जावा वर्ग (और कुछ आंतरिक कक्षाएं)
- वर्ग को 'स्रोत/परीक्षण' निर्देशिका में कॉपी-पेस्ट करें (चूंकि पैकेज 'परीक्षण' है)
- इसे चलाएं (कोई तर्क आवश्यक नहीं है)
माइक स्टोन से अपडेट करें:
मैं इसे स्वीकार करने जा रहा हूं क्योंकि यह मेरे द्वारा किए जाने वाले कार्यों के बहुत करीब लगता है, लेकिन मुझे लगा कि मैं जो भी करता हूं वह जोड़ता हूं।
असल में, मैंने एक समूह एनोटेशन बनाया जो टेस्ट (और अन्य) एनोटेशन की समूह संपत्ति की तरह व्यवहार करता है।
फिर, मैंने समूह एन्नोटेशन ट्रांसफॉर्मर बनाया, जो परिभाषित किए जा रहे सभी परीक्षणों और परीक्षण वर्गों को देखने के लिए IAnotationTransformer का उपयोग करता है, फिर समूह को जोड़ने के लिए परीक्षण को संशोधित करता है, जो समूह बहिष्करण और समावेशन के साथ पूरी तरह से काम करता है।
नए एनोटेशन ट्रांसफॉर्मर का उपयोग करने के लिए बिल्ड को संशोधित करें, और यह सब पूरी तरह से काम करता है!
खैर ... एक चेतावनी यह है कि यह समूह को गैर-परीक्षण विधियों में नहीं जोड़ता है ... क्योंकि जब मैंने ऐसा किया था, तो एक और एनोटेशन ट्रांसफॉर्मर था जो आपको कुछ भी बदलने देता है, लेकिन इसे किसी भी तरह शामिल नहीं किया गया था टेस्टएनजी में मैं किसी कारण से उपयोग कर रहा था ... इसलिए हमेशा के लिए एनोटेटेड विधियों को पहले/बाद में बनाने के लिए एक अच्छा विचार है = सत्य ... जो मेरे लिए पर्याप्त है।
अंतिम परिणाम यह है कि मैं कर सकता हूं:
@Groups({ "myGroup1", "myGroup2"})
public class MyTestCase {
@Test
@Groups("aMethodLevelGroup")
public void myTest() {
}
}
और मैंने ट्रांसफॉर्मर को सबक्लासिंग और सब कुछ के साथ काम किया।