2011-10-29 10 views
8

मैं समूह के साथ @BeforeMethod के उपयोग के बारे में सोच रहा हूं। http://testng.org/javadoc/org/testng/annotations/BeforeMethod.html में यह कहते हैं:समूह के साथ TestNG पहले विधि

alwaysRun: अगर सही पर सेट, इस विन्यास विधि परवाह किए बिना क्या समूहों यह के अंतर्गत आता है की नहीं की जाएगी।

public class BeforeTest { 
private static final Logger LOG = Logger.getLogger(BeforeTest.class); 
@BeforeMethod(groups = {"g1"}, alwaysRun = false) 
public void setUpG1(){ 
    sleep(); 
    LOG.info("BeforeMethod G1"); 
} 

@Test(groups = {"g1"}) 
public void g1Test(){ 
    sleep(); 
    LOG.info("g1Test()"); 
} 

@BeforeMethod(groups = {"g2"}, alwaysRun = false) 
public void setUpG2(){ 
    sleep(); 
    LOG.info("BeforeMethod G2"); 
} 

@Test(groups = {"g2"}) 
public void g2Test(){ 
    sleep(); 
    LOG.info("g2Test()"); 
} 


private void sleep(){ 
    try { 
     Thread.sleep(500); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
} 
} 

कौन सा आउटपुट:

तो मैं निम्नलिखित वर्ग है

BeforeMethod G1 
BeforeMethod G2 
g1Test() 
BeforeMethod G1 
BeforeMethod G2 
g2Test() 
एक तरफ

तथ्य मुझे लगता है कि awaysRun डिफ़ॉल्ट रूप से गलत है, किसी को भी क्यों दोनों से पहले मुझे समझा सकते हैं समूहों को अनदेखा करते हुए प्रत्येक परीक्षण से पहले विधियों को बुलाया जाता है? @Test की तरह कुछ (skipBeforeMethod = "setUpG1") भी काम करेगा।

मैं इंटेलिजे आईडीईए सीई 10.5.2 का उपयोग कर रहा हूं। मैंने इसे 1.0-मील का पत्थर -3 के साथ भी चलाया है।

उत्तर

2

आप टेस्टएनजी का आविष्कार कैसे कर रहे हैं? क्या आप कोई समूह चला रहे हैं?

यदि आप कोई नहीं चलाते हैं, तो @BeforeMethods चलाए जाएंगे। यदि आप "g1" चलाते हैं, तो केवल setupG1 चलाएगा, आदि ...

+0

मैं कोई नहीं चलाता, सोचा समूह समूह एक प्रकार का फ़िल्टरिंग है ताकि एक निश्चित समूह के साथ पहले विधि केवल उसी समूह के साथ परीक्षणों पर लागू हो। मुझे लगता है कि मैं गलत था। मुझे जो करना है वह आपके समाधान की तरह कुछ है (http://stackoverflow.com/questions/3115822/passing-output-of-one-test-method-to-another-method-testng), लेकिन उस समस्या समाधान यह है कि f1 के आधार पर कई परीक्षण होने पर mResult को रीसेट नहीं किया जाता है। – rweng

0

मैं हमेशाRun = true का उपयोग न करने की अनुशंसा करता हूं, लेकिन कॉन्फ़िगरेशन विधियों के लिए एक विशेष समूह बनाएं (हम "config" का उपयोग करते हैं), और पहले सभी को एनोटेट करें *() और *() के बाद विधियों = "config" के साथ विधियों।

सभी परीक्षण विधियों को आप जो भी समूह पसंद करते हैं, उसके साथ एनोटेट किया जा सकता है, उदा। "फू" और "बार"।

फिर, अपने समय में, आप कार्य करें:

-Dgroups=config,foo 

या

-Dgroups=config,bar 

आप फिर एक और समूह जोड़ते हैं, "newGroup", आप सभी config के माध्यम से जाने की जरूरत नहीं है विधियों और उन्हें "नया समूह" जोड़ें, आप बस चलाएं:

-Dgroups=config,newGroup 

इससे समूहों का प्रबंधन आसान हो जाता है!

यदि आप (गलती से?) की तरह कुछ भाग गया:

-Dgroups=config,nonExistingGroup 

कोई परीक्षण (और कोई config विधि) आप वास्तव में किसी भी परीक्षण "nonExistingGroup के लिए" की व्याख्या की और config तरीकों की जरूरत नहीं है के रूप में चलाने होगा केवल चलाएं कि "मिलान करने वाले परीक्षण" हैं जिनके लिए उन कॉन्फ़िगरेशन विधियों को चलाने की आवश्यकता है।

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