las pruebas JUnit se ejecutan en los errores de retorno Eclipse pesar de que he esperado anotación

StackOverflow https://stackoverflow.com/questions/1843758

Pregunta

(Esta es una pregunta de seguimiento a este uno.)

Estoy teniendo un problema con las pruebas junit4 en eclipse. Estoy tratando de utilizar el @test (esperado = ...) anotación a lanzamientos de prueba de unidad es una excepción. El problema es que cuando ejecuto las pruebas, vuelven como errores en lugar de pasar, a pesar de que estoy esperando las excepciones a ser lanzado.

Estoy usando Eclipse 3.4.0 y 4.3.1 JUnit.

Aquí está el código:

Clase de prueba:

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

Excepción:

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

caso de prueba:

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);
    }
}
¿Fue útil?

Solución

Parece que va a mezclar hasta JUnit 3 y 4 código. TestRunner es parte de JUnit 3, por lo que no se ve en las anotaciones en absoluto.

Trate de remover y cambiar extends TestCase TestRunner.run(IPAddressTest.class); a JUnitCore.runClasses(IPAddressTest.class); (que tendrá que añadir las importaciones según sea necesario).

Otros consejos

Probablemente porque cuando se intenta crear una instancia del InvalidIPAddressException el constructor lanza una NullPointerException cuando se trata de concatenar la cadena en ella.

public InvalidIPAddressException(String addr)
{
    super("\"" + addr + "\" is not a valid IP address"); // NPE while concatenate
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top