java - tutorial - Limpieza después de todas las pruebas junit
prueba unitaria con junit (5)
En mi proyecto, tengo que hacer una configuración de repositorio antes de todas las pruebas. Esto se hace usando algunas reglas estáticas difíciles. Sin embargo, no tengo ni idea de cómo hacer la limpieza después de todas las pruebas. No quiero mantener un número estático mágico que haga referencia al número de todos los métodos de prueba, que debo mantener todo el tiempo.
La forma más apreciada es agregar algún oyente que se invocaría después de todas las pruebas. ¿Ya hay alguna interfaz para JUnit4?
editar: esto no tiene nada que ver con @BeforeClass y @AfterClass, porque tengo que saber si el método anotado con @ AfterClass se invoca por última vez.
Acabo de encontrar el mismo problema.
Mi solución:
- Para una configuración global: use singleton (lazy) para acceder a algo global que requiera instanciación antes de las pruebas. La primera prueba que accede a este singleton activará el proceso de configuración global.
- Para un derribo global: use un enlace de cierre de Java:
Runtime.getRuntime().addShutdownHook(new Thread(() -> do_your_global_cleanup())));
Estoy usando JUnit 4.9. ¿Ayudará esto ?:
import junit.framework.TestCase;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
@RunWith(Suite.class)
@SuiteClasses({First.class,Second.class,Third.class})
public class RunTestSuite extends TestCase {
@BeforeClass
public static void doYourOneTimeSetup() {
...
}
@AfterClass
public static void doYourOneTimeTeardown() {
...
}
}
Editar: Estoy bastante seguro (a menos que malinterprete su pregunta) de que mi solución es lo que está buscando. es decir, un método de desmontaje después de que se hayan ejecutado todas las pruebas. No se requiere oyente, JUnit tiene esta facilidad. Gracias.
No es necesario usar el paquete, simplemente agregue @BeforeClass y @AfterClass como static
public class Tests {
@BeforeClass
public static void doYourOneTimeSetup()
{
...
}
@AfterClass
public static void doYourOneTimeTeardown() {
...
}
@Test
public void testYourTestcase()
{
...
}
}
Recomiendo usar org.junit.runner.notification.RunListener , ejemplo:
public class TestListener extends RunListener {
@Override
public void testRunStarted(Description description) throws Exception {
// Called before any tests have been run.
}
@Override
public void testRunFinished(Result result) throws Exception {
// Called when all tests have finished
}
}
Lea más directamente en JUnit java doc. Puede usarlo incluso con el plugin Safefire (pruebas de unidad) de Maven o el plugin de failsafe (pruebas de integración) agregando el siguiente código en la configuración del complemento:
<properties>
<property>
<name>listener</name>
<value>com.innovatrics.afismq.it.TestListener</value>
</property>
</properties>
Siempre puede escribir su TestRunner personalizado. Sin embargo, antes de hacer eso, necesita evaluar la necesidad de lo mismo. Es mejor usar @BeforeClass y @AfterClass. Otro ejemplo que puedo señalar es la forma en que hibernate permite a los usuarios hacer pruebas unitarias usando ''import.sql''.