Ignorar un test con TestNG

Los que venimos de JUnit y empezamos a usar TestNG siempre intentamos buscar la correspondencia entre cómo lo hacemos en JUnit y cómo se hace en TestNG.

Un ejemplo de esto es la anotación @Ignore de JUnit, con la que conseguimos que una clase o un test en concreto sean ignorados. Su uso, por lo menos desde mi experiencia, suele ser temporal. Por ejmplo, hay veces que nuestro código no es totalmente estable (o la funcionalidad está parcialmente desarrollada) y que por algún motivo es necesario desplegar nuestra aplicación en un entorno de Integración Continua que ejecutará todos nuestros tests unitarios, y que en este caso, fallará (sin entrar en debates de porqué desplegamos algo que no está totalmente desarrollado, situación que se repite a menudo cuando usamos un control de versiones anticuado como SVN…) Otro claro ejemplo del uso de esta anotación es cuando trabajamos siguiendo los principios de TDD, donde empezamos creando los tests antes que el código de una funcionalidad, por lo que los primeros tests siempre fallarán y necesitaremos anotar nuestros métodos o clases.

Con JUnit

Ahora veamos como conseguimos ignorar un test en concreto con JUnit:

import org.junit.Ignore;
import org.junit.Test;

public class JUnitTest {

    @Test
    public void test() {
    }

    @Ignore
    @Test
    public void testIgnorado() {
    }
}

Para ignorar todos los tests de una clase, podemos usar la misma anotación:

import org.junit.Ignore;
import org.junit.Test;

@Ignore
public class JUnitTest {

    @Test
    public void testIgnorado1() {
    }

    @Test
    public void testIgnorado2() {
    }
}

Con TestNG

Cómo lo hacemos si estamos trabajando con TestNG:

import org.testng.annotations.Test;

public class TestNGTest {

    @Test
    public void test() {
    }

    @Test(enabled = false)
    public void testIgnorado() {
    }
}

Por defecto, siempre están activados @Test(enabled = true), por lo que no es necesario indicarlo explícitamente.

Sin embargo, si queremos ignorar todos los tests de la clase, el siguiente código aunque compila correctamente, no funcionará y se ejecutarán los tests definidos en la clase:

import org.testng.annotations.Test;

@Test(enabled = false)
public class TestNGTest {

    @Test(enabled = true)
    public void test() {
    }

    @Test(enabled = true)
    public void testIgnorado() {
    }
}

La solución rápida, sería ignorar todos los tests con @Test(enabled = false). Desde mi punto de vista, si el proyecto no es demasiado grande, puede ser una solución totalmente válida. Aún así, aconsejo revisar la exclusión de grupos de TestNG que existe en este framework pero no en JUnit.

Aquí os dejo un hilo de stackoverflow donde explica más detalladamente el bug con la anotación @Test(enabled = false) sobre una clase.

Anuncios
Esta entrada fue publicada en Uncategorized y etiquetada , , , , , . Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s