2016-01-06 39 views
1

我發現了一件奇怪的事情,我很想知道它爲什麼會發生。我使用Junit 4.11的maven surefire插件(2.12.4)。當我想使用@Category註釋來禁用某些測試時。奇怪的是,它只適用於不延伸TestCase的測試。對於不擴展的測試,我能夠將註釋僅放在測試方法上運行/禁用,但是對於其他人則禁用類中的所有測試。 實施例: 命令行:僅 mvn test -Dgroups=!testgroups.DisabledTests運行用於第一片斷測試B:JUnit類別不適用於TestCase?

import static org.junit.Assert.*; 
public class DataTest { 
    @Test 
    public void testA(){...} 

    @Test @Category(testgroups.DisabledTests.class) 
    public void testB(){...} 
} 

用於與類延伸TestCase第二種情況下,它將運行沒有測試。

public class DataTest extends TestCase { 
    @Test 
    public void testA(){...} 

    @Test @Category(testgroups.DisabledTests.class) 
    public void testB(){...} 
} 

爲什麼會發生?

+0

問題是,第二個類是TestCase的擴展。由於這是JUnit 3樣式,註解@Category不起作用。使用@RunWith(JUnit4.class)對類進行註釋應該會在兩種情況下給出相同的結果 –

+0

謝謝。我已經在問題中寫過這個問題在'TestCase'中,但我不知道爲什麼。你的意思是'TestCase'已經被JUnit 4棄用了嗎? –

+1

JUnit 4通過查找'@ Test'註釋來查找測試。你可以從你的測試類中移除'extends TestCase'。此外,測試方法的名稱不再需要以'test'開頭。你可以自由選擇你想要的任何方法名稱。 –

回答

0

將溶液在註釋被賦予通過deborah-digges

的問題是,所述第二類是測試用例的一個擴展。由於這是JUnit 3樣式,註解@Category不起作用。通過尋找@Test註釋

JUnit 4分中認定測試:用註解@RunWith(JUnit4.class)類應該給你同樣的結果在這兩種情況下

,另一個由Stefan Birkner。您可以從測試課程中刪除extends TestCase。此外,測試方法的名稱不再必須以test開頭。你可以自由選擇你想要的任何方法名稱。