java - run - new junit test intellij
Ejecute todas las pruebas en un árbol fuente, no en un paquete (3)
Las pruebas de mi unidad están en un árbol de directorio separado de mis pruebas de integración, pero con la misma estructura de paquete. Mis pruebas de integración necesitan recursos externos (por ejemplo, un servidor) para estar disponible, pero mis pruebas de unidad son propiamente independientes entre sí y el entorno.
En IntelliJ-IDEA (v7) he definido una ejecución JUnit / configuración de depuración para ejecutar todas las pruebas en el paquete de nivel superior, y esto, por supuesto, retoma mis pruebas de integración que fallan.
Quiero definir una configuración de ejecución-junit que ejecute todas mis pruebas unitarias. ¿Algunas ideas?
Desafortunadamente, no hay forma de separar la salida de la compilación de IntelliJ aparte de las clases y clases de prueba dentro de un solo módulo (son las clases que el corredor de prueba está mirando).
Entonces, cuando tengo pruebas de integración, simplemente uso un segundo módulo específico para estas pruebas para resolver este problema, especificando los directorios de salida como necesarios para cada módulo.
La respuesta es crear un conjunto de pruebas que contenga solo esas pruebas debajo de la carpeta de prueba de la unidad y ejecutar eso en su lugar. Hay un addit junit que hace esto llamado DirectorySuiteBuilder, pero solo lo encontré después de reinventar la rueda.
¡Y ya se ha preguntado aquí!
import junit.framework.JUnit4TestAdapter;
import junit.framework.TestSuite;
import java.io.File;
import java.io.IOException;
public class DirectoryTestSuite {
static final String rootPath = "proj//src//test//java//";
static final ClassLoader classLoader = DirectoryTestSuite.class.getClassLoader();
public static TestSuite suite() throws IOException, ClassNotFoundException {
final TestSuite testSuite = new TestSuite();
findTests(testSuite, new File(rootPath));
return testSuite;
}
private static void findTests(final TestSuite testSuite, final File folder) throws IOException, ClassNotFoundException {
for (final String fileName : folder.list()) {
final File file = new File( folder.getPath() + "/" +fileName);
if (file.isDirectory()) {
findTests(testSuite, file);
} else if (isTest(file)) {
addTest(testSuite, file);
}
}
}
private static boolean isTest(final File f) {
return f.isFile() && f.getName().endsWith("Test.java");
}
private static void addTest(final TestSuite testSuite, final File f) throws ClassNotFoundException {
final String className = makeClassName(f);
final Class testClass = makeClass(className);
testSuite.addTest(new JUnit4TestAdapter(testClass));
}
private static Class makeClass(final String className) throws ClassNotFoundException {
return (classLoader.loadClass(className));
}
private static String makeClassName(final File f) {
return f.getPath().replace(rootPath, "").replace("//", ".").replace(".java", "");
}
}
IntelliJ IDEA CE 10.5 tiene una (¿nueva?) Opción para ejecutar todas las pruebas dentro de un directorio configurado: