java - test - junit tutorial español
Ejecute todas las pruebas en Junit 4 (7)
Con Eclipse Indigo (posiblemente Helios también) en el cuadro de diálogo Configuraciones de ejecución, ahora puede ejecutar todas las pruebas en un proyecto, paquete o carpeta de origen seleccionado.
También una buena referencia de Eclipse es el artículo Prueba de unidad Java con JUnit 4.x en Eclipse .
Quiero poder ejecutar todas las pruebas en un proyecto mediante programación. Sé que Eclipse tiene una configuración de "Ejecutar como prueba JUnit" que de alguna manera toma todas las pruebas en un proyecto y las ejecuta. ¿Hay alguna forma para que también pueda tomar la lista de pruebas mediante programación y ejecutarlas? ¿O hay alguna buena manera de construir un conjunto de pruebas que contenga todos los casos de prueba sin enumerar manualmente cada uno (más de 700) de ellos?
Probé la opción "Nuevo ... -> Suite de prueba" en Eclipse, pero parece funcionar solo para JUnit 3, identificando pruebas extendiendo desde TestCase
Las clases de prueba son JUnit 4, por lo que su única característica distintiva es la anotación, sin convención de nomenclatura, sin subclases de TestCase.
¡Gracias por adelantado!
De la parte superior de mi cabeza usando Spring:
- Implemente un TypeFilter que combine clases con métodos anotados con @Test (no olvide considerar las superclases)
- Invoque el escaneo de classpath en su paquete de prueba superior
- Invoca el JUnitRunner con los resultados del escaneo.
Más información sobre la exploración de classpath y filtros de tipo personalizados here
En Eclipse (estoy usando 4.6.1) - Haga clic derecho en la carpeta del proyecto, seleccione "Ejecutar como", elija "Prueba de JUnit"
Ejecutará todas las pruebas en ese proyecto. Lo mismo para un paquete.
Ninguna de las otras respuestas lo hizo por mí. Tenía 40k pruebas que necesitaba ejecutar, por lo que enumerar manualmente cada clase no era una opción.
Lo hice con ClasspathSuite . Un conjunto de pruebas que ejecuta todos los casos de prueba Junit4 y Junit3 en la ruta de clase es el siguiente:
import org.junit.extensions.cpsuite.ClasspathSuite;
import org.junit.extensions.cpsuite.ClasspathSuite.*;
import org.junit.runner.RunWith;
import org.junit.runner.JUnitCore;
import static org.junit.extensions.cpsuite.SuiteType.*;
@RunWith(ClasspathSuite.class)
@SuiteTypes({ JUNIT38_TEST_CLASSES, TEST_CLASSES })
public class RunAllSuite {
/* main method not needed, but I use it to run the tests */
public static void main(String args[]) {
JUnitCore.runClasses(RunAllSuite.class);
}
}
Necesitaba ejecutarlo desde la línea de comandos, así que esto es lo que hice:
- Descargado cp-1.2.6.jar
- Crea el RunAllSuite mencionado anteriormente
- Compila la clase,
javac RunAllSuite.java -cp cpsuite-1.2.6.jar;junit-4.8.1.jar
- ejecútelo con las pruebas de destino en la ruta de clase,
java -cp cpsuite-1.2.6.jar;junit-4.8.1.jar;path/to/runallsuite/folder;target/classes;target/test-classes RunAllSuite
Y eso es. Con RunAllSuite arriba, en cualquier parte de tu código, puedes hacer JUnitCore.runClasses (RunAllSuite.class), que ejecuta todas las pruebas en la ruta de clase. También hay otras opciones de configuración que se explican en la página de inicio de ClasspathSuite.
Tenga en cuenta también que la clase dada anteriormente no imprime nada. Si eso es necesario, puedes hacer
import org.junit.extensions.cpsuite.ClasspathSuite;
import org.junit.extensions.cpsuite.ClasspathSuite.*;
import org.junit.runner.RunWith;
import org.junit.runner.JUnitCore;
import org.junit.internal.TextListener;
import static org.junit.extensions.cpsuite.SuiteType.*;
@RunWith(ClasspathSuite.class)
@SuiteTypes({ JUNIT38_TEST_CLASSES, TEST_CLASSES })
public class RunAllSuite {
public static void main(String args[]) {
JUnitCore junit = new JUnitCore();
junit.addListener(new TextListener(System.out));
junit.run(RunAllSuite.class);
}
}
Puede hacer esto fácilmente desde maven usando el complemento surefire : normalmente limpio / compilo / instalo mis proyectos desde la línea de comandos antes de compararlos para el uso de eclipse ( mvn eclipse:clean eclipse:eclipse
) y puede definir un conjunto de pruebas en su pom que enumera todas las pruebas que desea ejecutar en masa cada vez que ejecuta mvn install
. No los está llamando programáticamente, exactamente, pero ciertamente puede llamarlos en masa.
También recomiendo usar las anotaciones de JUnit Suite. Sigue el enlace para más detalles .
Aunque realmente no resuelve su problema inmediato, me parece una práctica general muy útil para crear suites y suites, por ejemplo, para un paquete como PackageFooSuite
etc., y reunir estas suites en una o más suites nuevamente, como ModuleFooSuite
y tener Una suite de nivel superior, como AllTestsSuite
. De esta manera, es fácil ejecutar todas las pruebas en un solo paso, así como las pruebas de submódulos para el paquete en el que estoy trabajando actualmente (y hacer que las pruebas se ejecuten más rápido que si las ejecutara todas):
@RunWith(Suite.class)
@Suite.SuiteClasses({ PackageFooSuite.class, PackageBarSuite.class} )
public final class AllTestsSuite {} // or ModuleFooSuite, and that in AllTests