2009-12-03 33 views
0

(這是一個this跟進的問題。)JUnit測試在Eclipse回傳失誤運行,即便我已經預料註釋

我有在Eclipse中JUnit4測試的問題。我試圖使用@Test(expected = ...)註釋來單元測試異常拋出。問題是,當我運行測試時,即使我期望拋出異常,它們也會作爲錯誤而不是傳遞返回。

我使用的Eclipse 3.4.0和JUnit 4.3.1。

下面的代碼:

類測試:

public class IPAddress 
{ 
    private byte[] octets; 

    private IPAddress() 
    { 
     octets = new byte[4]; 
    } 

    public IPAddress(String addr) throws InvalidIPAddressException 
    { 
     this(); 

     if(addr == null || !isValid(addr)) 
      throw new InvalidIPAddressException(addr); 

     String strOctets[] = addr.split("\\."); 

     for (int i = 0; i < strOctets.length; i++) 
      octets[i] = Byte.parseByte(strOctets[i]); 
    } 

    public static boolean isValid(String addr) 
    { 
     String strOctets[] = addr.split("\\."); 

     if (strOctets.length != 4) 
      return false; 

     for (int i = 0; i < strOctets.length; i++) 
     { 
      try 
      { 
       int num = Integer.parseInt(strOctets[i]); 

       if (num < 0 || num > 255) 
        return false; 
      } catch (NumberFormatException e) 
      { 
       return false; 
      } 
     } 

     return true; 
    } 

    public byte[] getOctets() 
    { 
     return octets; 
    } 
} 

例外:

public class InvalidIPAddressException extends Exception 
{ 
    public InvalidIPAddressException(String addr) 
    { 
     super("\"" + addr + "\" is not a valid IP address"); 
    } 
} 

測試用例:

public class IPAddressTest extends TestCase 
{ 
    @Test(expected=InvalidIPAddressException.class) 
    public void testNullParameter() throws InvalidIPAddressException 
    { 
     @SuppressWarnings("unused") 
     IPAddress addr = new IPAddress(null); 
     fail("InvalidIPAddressException not thrown."); 
    } 

    @Test(expected=InvalidIPAddressException.class) 
    public void testHostnameParameter() throws InvalidIPAddressException 
    { 
     @SuppressWarnings("unused") 
     IPAddress addr = new IPAddress("http://www.google.com"); 
     fail("InvalidIPAddressException not thrown."); 
    } 

    @Test 
    public void testValidIPAddress() throws InvalidIPAddressException 
    { 
     IPAddress addr = new IPAddress("127.0.0.1"); 
     byte[] octets = addr.getOctets(); 

     assertTrue(octets[0] == 127); 
     assertTrue(octets[1] == 0); 
     assertTrue(octets[2] == 0); 
     assertTrue(octets[3] == 1); 
    } 

    public static void main(String[] args) 
    { 
     TestRunner.run(IPAddressTest.class); 
    } 
} 

回答

4

它看起來像你混淆了JUnit 3和4的代碼。 TestRunner是JUnit 3中的一部分,因此不會在註解看看所有。

嘗試刪除extends TestCase和改變TestRunner.run(IPAddressTest.class);JUnitCore.runClasses(IPAddressTest.class);(你需要來添加所需的進口)。

+0

問題解決了。謝謝! – Seth 2009-12-04 01:56:06

+0

另外,如果你使用Eclipse,你可以使用內置的TestRunner - 右擊在Package Explorer中的測試類並選擇Run As - > JUnit測試。 JUnitCore.runClasses方法實際上並不提供任何輸出,所以這可能是更好的方法。 – matt 2009-12-04 02:02:54

0

可能是因爲當您嘗試實例化InvalidIPAddre ssException構造函數在嘗試連接其中的字符串時拋出NullPointerException。

public InvalidIPAddressException(String addr) 
{ 
    super("\"" + addr + "\" is not a valid IP address"); // NPE while concatenate 
} 
相關問題