JUnit tests run in eclipse return errors even though I have expected annotation
(这是对此问题的跟进问题。)
我在eclipse中遇到了JUnit4测试的问题。 我正在尝试使用@Test(expected = ...)注释来单元测试异常抛出。 问题是,当我运行测试时,它们会返回错误而不是传递,即使我期望抛出异常。
我正在使用eclipse 3.4.0和JUnit 4.3.1。
这是代码:
要测试的类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | 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; } } |
例外:
1 2 3 4 5 6 7 |
测试用例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | 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); } } |
看起来你正在混淆JUnit 3和4代码。
尝试删除
可能因为当您尝试实例化InvalidIPAddressException时,构造函数在尝试连接其中的字符串时会抛出NullPointerException。
1 2 3 4 | public InvalidIPAddressException(String addr) { super(""" + addr +"" is not a valid IP address"); // NPE while concatenate } |