Inspirado por experimental corredor ParallelComputer de JUnit que he construido mi propio ParallelSuite y ParallelParameterized corredores. Usando estos corredores, uno puede paralelizar fácilmente suites de prueba y pruebas parametrizadas.
ParallelSuite.java
public class ParallelSuite extends Suite {
public ParallelSuite(Class<?> klass, RunnerBuilder builder) throws InitializationError {
super(klass, builder);
setScheduler(new RunnerScheduler() {
private final ExecutorService service = Executors.newFixedThreadPool(4);
public void schedule(Runnable childStatement) {
service.submit(childStatement);
}
public void finished() {
try {
service.shutdown();
service.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
} catch (InterruptedException e) {
e.printStackTrace(System.err);
}
}
});
}
}
ParallelParameterized.java
public class ParallelParameterized extends Parameterized {
public ParallelParameterized(Class<?> arg0) throws Throwable {
super(arg0);
setScheduler(new RunnerScheduler() {
private final ExecutorService service = Executors.newFixedThreadPool(8);
public void schedule(Runnable childStatement) {
service.submit(childStatement);
}
public void finished() {
try {
service.shutdown();
service.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
} catch (InterruptedException e) {
e.printStackTrace(System.err);
}
}
});
}
}
El uso es simple. Simplemente cambie @RunWith valor de anotaciones a una de estas Paralela * clases.
@RunWith(ParallelSuite.class)
@SuiteClasses({ATest.class, BTest.class, CTest.class})
public class ABCSuite {}
La página enlazada dice que "para la mayoría de las soluciones de doble núcleo, correr con hilos paralelos nunca es más rápido que ejecutar sin hilos". ¿Sigue siendo el caso? – Raedwald
Creo que si sus pruebas hacen IO, aún así se beneficiarían. Por ejemplo, si las pruebas de su unidad se parecen más a las pruebas de integración y llegan a la base de datos, ejecutarlas en paralelo debería acelerarlas. – Dave
@Raedwald No esperes demasiado * demasiado para las pruebas cortas de unidades no vinculadas es lo que trato de decir. Las versiones más recientes de infalible también son mejores/más eficientes que las 2.5 descritas en la publicación, por lo que puede obtener resultados ligeramente mejores. – krosenvold