2011-02-16 9 views
13

मैं "वर्तमान" नामक काम करने के लिए प्रासंगिक परीक्षणों का सबसेट चलाने के लिए समूह का उपयोग करने का प्रयास कर रहा हूं। समस्या यह है कि यदि मैं @BeforeMethod में कुछ सेटअप करने के लिए सुपरक्लास का उपयोग करता हूं, तो जब मैं सभी परीक्षण चलाता हूं तो विधि चलती है, लेकिन जब मैं केवल "वर्तमान" समूह के साथ नहीं चलता हूं।TestNG @BeforeMethod विधि को सुपरक्लास में रहने पर नहीं कहा जाता है और एक विशिष्ट समूह चलाया जाता है

तो जब मैं सभी परीक्षण चलाता हूं, तो खाली टेस्ट विफल रहता है क्योंकि @BeforeMethod को कॉल किया जाता है, जब केवल समूह चालू होता है, विधि को नहीं कहा जाता है। नोट: यदि मैं उप-वर्ग में @ टेस्ट (समूह = {"वर्तमान"}) जोड़ता हूं, तो यह चलता है - हालांकि, यह सभी उप-वर्गों को चलाता है जो "वर्तमान" के साथ लेबल नहीं होते हैं, जो "वर्तमान" समूह के उद्देश्य को हरा देता है ।

यदि इस व्यवहार को पूरा करने का एक बेहतर तरीका है, तो मैं सभी समाधानों के लिए खुला हूं।

धन्यवाद, Ransom

सुपर क्लास:

public class TestNGSuperclass { 
    @BeforeMethod 
    public void failingToShowThatItIsNotRun() { 
     Assert.fail(); 
    } 
} 

उपवर्ग:

@Test(groups = {"current"}) 
public class TestNGCurrentGroup extends TestNGSuperclass { 
    public void emptyTest() {} 
} 

TestNG विन्यास:

<test name="current"> 
    <groups> 
     <run> 
      <include name="current"/> 
     </run> 
    </groups> 
    <packages> 
     <package name="uiowa.wf.test.*"/> 
    </packages> 
</test> 
<test name="all-tests"> 
    <packages> 
     <package name="uiowa.wf.test.*"/> 
    </packages> 
</test> 

उत्तर

27

आपके @BeforeMethod आपके द्वारा चलाए जा रहे समूह का हिस्सा बनने की आवश्यकता है।

यदि आप वर्तमान में चल रहे समूह के बावजूद आप अपने समूह के मूल्य को हार्डकोड नहीं करना चाहते हैं तो आप @BeforeMethod(alwaysRun = true) का भी उपयोग कर सकते हैं और यदि आपको लगता है कि आप हमेशा इस विधि को चलाने के लिए चाहते हैं।

+0

धन्यवाद, मेरे पहले मोड में "alwaysRun = true" जोड़ना और AfterMethod ने समस्या हल की। –

4

आप ०१२३३४४१०९४ की कोशिश की है? मैं इस निष्कर्ष पर आया हूं कि टेस्टएनजी समूह और विरासत वास्तव में अच्छी तरह से काम नहीं करती है।

उदाहरण के लिए, ऊपर काम करता है को समूह current में सब कुछ चलाते हैं, लेकिन अगर आप सब कुछ अन्य समूह current से नहीं चला और आधार वर्ग दोनों समूहों के लिए प्रयोग किया जाता है।

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

+0

यह मेरे लिए काम करेगा - क्योंकि मैं कभी भी विपरीत के विपरीत नहीं चलता - मैं बस तब तक चालू हूं जब तक कि मेरी सुविधा में सब कुछ नहीं किया जाता है - फिर सभी परीक्षण यह सुनिश्चित करने के लिए कि मैंने वापस नहीं किया है। –

+0

यदि आपके पास टेस्टएनजी के साथ संयोजन का उपयोग करने के लिए एक अच्छा संसाधन है - यह वास्तव में भी सहायक होगा। –

+0

मैं बस अपने सभी 'सामान्य' कोड को उस वर्ग में लपेटता हूं जिसे मैं @BeforeMethod विधि में लोड करता हूं। यानी विरासत की बजाय सरल संरचना। –

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