2017-03-06 24 views
1

我爲我的方法寫了一個JUnit測試。
這是我的方法:期待與JUnit的例外不起作用

public static int delimit(int value, int min, int max) throws IllegalArgumentException { 
     if (min > max) 
     throw new IllegalArgumentException("Min value was greater than max value."); 

     return Math.min(max, Math.max(min, value)); 
    } 

這是測試:

public class DMathTest extends TestCase { 
    @Rule 
    public ExpectedException exception = ExpectedException.none(); 

    @Test 
    public void testDelimit() { 
     ... 

     exception.expect(IllegalArgumentException.class); 
     DMath.delimit(1, 3, 2); 
    } 

} 

IllegalArgumentException確實拋出,但JUnit的標記爲正在測試一個錯誤。它告訴我測試失敗,因爲(預期的)異常。沒有AssertionError或任何東西,它只是顯示我的IllegalArgumentException,好像整個期望代碼不存在。 然後我刪除了規則和所有的期望代碼,這是完全相同的結果(當然,這是應該如何)。所以規則和通話

exception.expect(IllegalArgumentException.class); 

沒有做任何事情。
我使用Eclipse並使用Maven包含JUnit。 dependency元素看起來是這樣的:

<dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
    <version>4.12</version> 
    <scope>test</scope> 
</dependency> 

我做了什麼錯?爲什麼期望異常無效?

回答

3
public class DMathTest extends TestCase { 
         ^^^^^^^^^^^^^^^^ 

這可能是錯誤。 TestCase是JUnit 3.x API。 JUnit 4.x測試不再擴展該類,並且可能通過擴展它來改變語義。請刪除extends子句並重試,否則,代碼看起來不正確。

另外,在JUnit 4.x中,不再需要使用「testXyz」命名約定。方法名稱可以是任何東西,只要該方法是公開的並用@Test註釋。我通常使用「should」方法名稱,例如「delimitShouldFailIfMinGtMax」。這使得更多可讀的測試報告。

+0

是的,那是錯誤的。不擴展'TestCase'就可以正常工作。非常感謝你! – David