Java JUnit测试在eclipse返回错误中运行,尽管我预期会出现注释

Java JUnit测试在eclipse返回错误中运行,尽管我预期会出现注释,java,eclipse,unit-testing,junit,junit4,Java,Eclipse,Unit Testing,Junit,Junit4,(这是一个问题的后续问题。) 我对eclipse中的JUnit4测试有问题。我正在尝试使用@Test(预期=…)注释来引发单元测试异常。问题是,当我运行测试时,它们以错误的形式返回,而不是传递,即使我希望抛出异常 我正在使用Eclipse3.4.0和JUnit4.3.1 代码如下: 要测试的类: public class IPAddress { private byte[] octets; private IPAddress() { octets = n

(这是一个问题的后续问题。)

我对eclipse中的JUnit4测试有问题。我正在尝试使用@Test(预期=…)注释来引发单元测试异常。问题是,当我运行测试时,它们以错误的形式返回,而不是传递,即使我希望抛出异常

我正在使用Eclipse3.4.0和JUnit4.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 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);
    }
}

可能是因为当您尝试实例化InvalidIPAddressException时,构造函数在尝试连接其中的字符串时会抛出NullPointerException

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

可能是因为当您尝试实例化InvalidIPAddressException时,构造函数在尝试连接其中的字符串时会抛出NullPointerException

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

看起来你把JUnit3和JUnit4的代码弄混了
TestRunner
是JUnit3的一部分,因此根本不看注释


尝试删除
extensedtestcase
并更改
TestRunner.run(IPAddressTest.class)
to
JUnitCore.runClasses(IPAddressTest.class)(您需要根据需要添加导入)。

看起来您混淆了JUnit3和JUnit4代码
TestRunner
是JUnit3的一部分,因此根本不看注释


尝试删除
extensedtestcase
并更改
TestRunner.run(IPAddressTest.class)
to
JUnitCore.runClasses(IPAddressTest.class)(您需要根据需要添加导入)。

此外,如果您使用的是eclipse,您可以使用内置的testrunner—右键单击PackageExplorer中的测试类,然后选择RunAs->JUnit test。JUnitCore.runClasses方法实际上不提供任何输出,因此这可能是一种更好的方法。此外,如果您使用eclipse,您可以使用内置的testrunner-右键单击package explorer中的测试类,然后选择Run As->JUnit test。JUnitCore.runClasses方法实际上没有给出任何输出,因此这可能是一种更好的方法。