2010-10-09 222 views
4

我是新來的使用JUnit進行測試,並且需要測試異常的提示。使用JUnit測試異常。即使發生異常,測試也會失敗

我有拋出一個異常,如果它得到一個空字符串輸入一個簡單的方法:

public SumarniVzorec(String sumarniVzorec) throws IOException 
    { 
     if (sumarniVzorec == "") 
     { 
      IOException emptyString = new IOException("The input string is empty"); 
      throw emptyString; 
     } 

我想測試,如果參數爲空字符串的例外實際上是拋出。爲此,我使用以下代碼:

@Test(expected=IOException.class) 
    public void testEmptyString() 
    { 
     try 
     { 
      SumarniVzorec test = new SumarniVzorec(""); 
     } 
     catch (IOException e) 
     { // Error 
      e.printStackTrace(); 
     } 

結果是引發異常,但測試失敗。 我錯過了什麼?

謝謝,托馬斯

回答

13

刪除try-catch塊。 JUnit將收到異常並進行適當處理(根據您的註釋,考慮測試成功)。如果你禁止異常,那麼JUnit是否被拋出是無法知道的。

@Test(expected=IOException.class) 
public void testEmptyString() throws IOException { 
    new SumarniVzorec(""); 
} 

此外,博士傑裏理所當然地指出,你不能用==操作比較字符串。使用equals方法(或string.length == 0

http://junit.sourceforge.net/doc/cookbook/cookbook.htm(見 '應例外' 部分)

+1

謝謝你,但我已經嘗試過,它給出了一個錯誤:未處理的異常類型IOError – 2010-10-09 08:45:55

+2

你仍然需要聲明該方法爲'拋出IOException' – developmentalinsanity 2010-10-09 08:51:24

+0

@Tomas你從哪裏得到IOError?你可以發佈整個錯誤消息(與堆棧跟蹤)? – 2010-10-09 08:51:58

1

也許sumarniVzorec.eq​​uals( 「」),而不是sumarniVzorec == 「」

+0

謝謝,我修復了這個問題,但並沒有解決上述問題。 – 2010-10-09 08:48:54

0

怎麼樣:

@Test 
public void testEmptyString() 
{ 
    try 
    { 
     SumarniVzorec test = new SumarniVzorec(""); 
     org.junit.Assert.fail(); 
    } 
    catch (IOException e) 
    { // Error 
     e.printStackTrace(); 
    } 
0

另一種方式來做到這一點:

public void testEmptyString() 
{ 
    try 
    { 
     SumarniVzorec test = new SumarniVzorec(""); 
     assertTrue(false); 

    } 
    catch (IOException e) 
    { 
     assertTrue(true); 
    }