2011-02-16 62 views
13

我正在嘗試使用組來運行與我正在調用的「當前」相關的測試子集。問題是,如果我使用超類在@BeforeMethod中進行一些設置,則在運行所有測試時運行該方法,但當我僅使用指定的「current」組運行時,該方法運行。TestNG @BeforeMethod方法駐留在超類中並且運行特定組時未被調用

因此,當我運行所有測試時,emptyTest失敗,因爲@BeforeMethod被調用,當只運行組current時,方法不會被調用。注意:如果我將@Test(groups = {「current」})添加到子類,那麼它會運行 - 但是,它會運行所有未標記爲「current」的子類,這會破壞「當前」組的目的。

如果有更好的方法來完成這種行爲,我向所有解決方案開放。

感謝, 贖金

超類:

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)

4

你試過@BeforeMethod(groups = {"current"})?我已經得出結論,TestNG組和繼承並不能很好地發揮作用。

例如,上面的作品,如果你運行組current一切,但如果你運行一切其他比組current和基類是用於這兩個羣體。

我目前正在重構我們所有的測試類,以消除子類化並改用組合。

+0

這對我來說很有用 - 因爲我從來沒有運行過與目前相反的模式 - 我只是運行最新的功能,直到我的功能中的所有功能都完成 - 然後進行所有測試以確保我沒有退步。 – 2011-02-16 18:35:56

+0

如果你有一個很好的關於如何使用TestNG組合的資源 - 那也會非常有幫助。 – 2011-02-16 18:36:27

相關問題