Frage

(Dies ist eine Follow-up-Frage dieses ein.)

ich habe ein Problem mit JUnit4 Tests in Eclipse hat. Ich versuche, die @Test (erwartet = ...) Anmerkung zu Unit-Test-Ausnahme Wurf zu verwenden. Das Problem ist, dass, wenn ich die Tests laufen, kommen sie wieder als Fehler statt nebenbei, auch wenn ich die Ausnahmen gehe davon aus geworfen werden.

Ich bin mit Eclipse 3.4.0 und JUnit 4.3.1.

Hier ist der Code:

Klasse zu testen:

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;
    }
}

Ausnahme:

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

Testfall:

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);
    }
}
War es hilfreich?

Lösung

Es sieht aus wie Sie vermischen JUnit 3 und 4 Code. TestRunner ist ein Teil von JUnit 3, also nicht an den Anmerkungen überhaupt nicht aus.

Versuchen extends TestCase Entfernen und Ändern TestRunner.run(IPAddressTest.class); JUnitCore.runClasses(IPAddressTest.class); (Sie werden die Importe nach Bedarf hinzufügen müssen).

Andere Tipps

Wahrscheinlich, weil, wenn Sie versuchen, die InvalidIPAddressException instanziiert der Konstruktor eine Nullpointer werfen, wenn die Zeichenfolge in es zu verketten versucht.

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