2010-03-14 62 views
10

我正在爲一個構造函數寫一個jUnit測試,它解析一個字符串然後檢查很多東西。當有錯誤的數據時,對於每一件事情,都會拋出一些帶有不同消息的IllegalArgumentException。 所以我想爲它編寫測試,但我怎麼才能識別出什麼錯誤? 這是我能做到這一點:jUnit在不同情況下有相同的異常

@Test(expected=IllegalArgumentException.class) 
public void testRodneCisloRok(){ 
    new RodneCislo("891415",dopocitej("891415")); 
} 

,這是我想是的,但我不知道是否有可能它在某種程度上寫:

@Test(expected=IllegalArgumentException.class("error1")) 
public void testRodneCisloRok(){ 
    new RodneCislo("891415",dopocitej("891415")); 
} 

回答

4

你」會需要做的老式方法:

@Test 
public void testRodneCisloRok() { 
    try { 
     new RodneCislo("891415",dopocitej("891415")); 
     fail("expected an exception"); 
    } catch (IllegalArgumentException ex) { 
     assertEquals("error1", ex.getMessage()); 
    } 
} 

@Test(expected=...)語法是一個方便的方便,但它在許多情況下,太簡單了。

如果區分異常情況很重要,則可能需要考慮開發異常的類層次結構,這可以專門捕獲。在這種情況下,IllegalArgumentException的子類可能是個好主意。這可以說是更好的設計,並且您的測試可以捕獲特定的異常類型。

32

如果你有的JUnit 4.7或以上,你可以使用這個(優雅的)的方式:

@Rule 
public ExpectedException exception = ExpectedException.none(); 

@Test 
public void testRodneCisloRok(){ 
    exception.expect(IllegalArgumentException.class); 
    exception.expectMessage("error1"); 
    new RodneCislo("891415",dopocitej("891415")); 
} 
相關問題