2012-12-14 102 views
10

後是否有可能運行已方法標註了@Before類JUnit的@Test方法,但是忽略只對該測試的@Before方法?運行JUnit @Test忽略@前/ @

編輯:如果JUnit支持此功能,而不是解決方法,我很感興趣。我知道解決方法如將測試移到另一個類中或刪除註釋,並在每種測試方法中手動調用setUp()

假設在一個類中有30個測試,並且其中29個@Before真的簡化了測試初始化​​,但是對於其中一個(或多個)它是無用的/它使事情變得複雜。

public class MyTestClass { 

    @Before 
    public void setUp() { 
     //setup logic 
    } 

    @Test 
    public void test1() { 
     //[...] 
    } 

    @Test 
    public void test2() { 
     //[...] 
    } 

    //more tests here 

    @Test(ignoreBefore = true, ignoreAfter = true //false by default) 
    //something equivalent to this 
    public void test20() { 
     //[...] 
    } 

} 
+0

您可以在'@ Before'和'@ After'註釋中將'test20'移動到單獨的類中嗎? – user1516873

+0

@ user1516873從技術上講,是的,但我想在一個測試類中保留一個類的所有測試。當這個類被設計/開發時,測試不被認爲是重構,也不是解決方案。此外,單元測試的定義表明它們是獨立的,可以分開運行。 – m3th0dman

回答

2

如果它沒用,它不應該是一個問題 - 是否損害再次運行setUp?

但我不認爲這是可能的,並尋找我作爲一個跛子功能。

另一種方法 - 將該測試移至單獨的測試類。

+1

+1我肯定會在單獨的測試課上犯錯。顯然其他測試有相似之處,需要將它們組合在一起。你的奇怪的一次性測試沒有。 –

+0

我真的很好奇,如果JUnit提供此功能,而不是解決方法。爲什麼它看起來像一個殘缺的功能?單元測試的基本定義是不是單元測試應該完全獨立於彼此?其他測試不應該關心他們中的一些人是否打電話給@Before方法,其他人則不會。 – m3th0dman

+0

@ m3th0dman這不是測試之間的依賴關係,而是依賴於測試的上下文。使用setUp方法將測試放入一個類中。爲什麼不執行呢?看起來非常令人驚訝。軟件開發中的驚喜令人不快。 – kan