Domanda

(Questo è un follow-up domanda questo un.)

Sto avendo un problema con i test Junit4 in Eclipse. Sto cercando di usare il @Test (previsto = ...) annotazioni ad eccezione unit test di lancio. Il problema è che quando ho eseguito i test, tornano come errori invece di passare, anche se mi aspetto le eccezioni per essere gettato.

Sto usando Eclipse 3.4.0 e 4.3.1 JUnit.

Ecco il codice:

Classe di prova:

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

Eccezione:

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

Test case:

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);
    }
}
È stato utile?

Soluzione

Sembra che tu stia mescolando JUnit 3 e 4 del codice. TestRunner è parte di JUnit 3, in modo da non guardare le annotazioni a tutti.

Provare a rimuovere extends TestCase e cambiando TestRunner.run(IPAddressTest.class); a JUnitCore.runClasses(IPAddressTest.class); (è necessario aggiungere le importazioni, come richiesto).

Altri suggerimenti

Probabilmente perché quando si tenta di creare un'istanza della InvalidIPAddressException il costruttore gettare un NullPointerException quando si tenta di concatenare la stringa in esso.

public InvalidIPAddressException(String addr)
{
    super("\"" + addr + "\" is not a valid IP address"); // NPE while concatenate
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top