2011-10-29 86 views
8

我想知道@BeforeMethod的使用情況。在http://testng.org/javadoc/org/testng/annotations/BeforeMethod.html它說:TestNG BeforeMethod with groups

alwaysRun:如果設置爲true,這個配置方法將運行,不管它屬於哪個組。

所以我有以下類:

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默認爲false,任何人都可以,爲什麼這兩個之前給我解釋一下方法在每次測試之前被調用,忽略組?類似@Test(skipBeforeMethod =「setUpG1」)也可以。

我正在使用IntelliJ IDEA CE 10.5.2。我也用gradle 1.0-milestone-3來運行它。

回答

2

你是如何調用TestNG的?你正在運行任何組?

如果您運行none,那麼@BeforeMethods都會運行。如果你運行「g1」,只有setupG1會運行,等等...

+0

我沒有運行,思想分組是一種過濾,因此具有某個組的beforeMethod只適用於具有相同組的測試。猜猜我錯了。我需要做的是類似於你的解決方案在這裏(http://stackoverflow.com/questions/3115822/passing-output-of-one-test-method-to-another-method-testng),但與此問題解決方法是,如果有許多測試取決於f1,則mResult不會被重置。 – rweng

0

我會建議不要使用alwaysRun = true,但爲配置方法創建一個特殊的組(我們使用「config」),並註釋所有*()和之後的*()方法組=「config」。

所有測試方法都可以用你喜歡的任何組進行註釋,例如「foo」和「bar」。

然後,在你來看,你這樣做:

-Dgroups=config,foo 

-Dgroups=config,bar 

如果再加入另一組,「新聞組」,你不必去通過所有的配置方法,並添加「newGroup」給他們,你只需運行:

-Dgroups=config,newGroup 

這使得組的管理更容易!

如果您(錯誤?)跑是這樣的:

-Dgroups=config,nonExistingGroup 

沒有測試(沒有配置方法),你居然沒有註釋爲「nonExistingGroup」任何測試和配置方法將只運行如果存在需要這些配置方法運行的「匹配測試」,則運行。

相關問題