2011-01-10 25 views
5

Soy bastante nuevo en Java. He construido una única clase de prueba JUnit y dentro de este archivo hay una cantidad de métodos de prueba. Cuando ejecuto esta clase (en NetBeans) ejecuta cada método de prueba en la clase en orden.¿Cómo puedo ejecutar (o cambiar el orden de) métodos de prueba específicos en una clase de prueba JUnit?

Pregunta 1: ¿Cómo puedo ejecutar solo un subconjunto específico de los métodos de prueba en esta clase? (Respuesta potencial: escriba @Ignore arriba @Test para las pruebas que deseo ignorar. Sin embargo, si quiero indicar qué métodos de prueba quiero ejecutar en lugar de aquellos que deseo ignorar, ¿hay alguna manera más conveniente de hacerlo? ?)

Pregunta 2: ¿Hay alguna manera fácil de cambiar el orden en que se ejecutan los distintos métodos de prueba?

Gracias.

+0

Cuando dice métodos, ¿está hablando de métodos de prueba? –

+3

¿Por qué es importante el pedido? Cada prueba unitaria debe poder ejecutarse aisladamente. –

+2

En general, es un olor de prueba para depender del orden de ejecución, las pruebas deben ser apátridas. –

Respuesta

6

Deberías leer sobre TestSuite 's. Permiten agrupar & para ordenar los métodos de prueba de su unidad. He aquí una forma de extracto this article

clases de prueba JUnit" pueden ser enrolladas para ejecutarse en un orden específico, creando un conjunto de pruebas

EDIT:. Aquí hay un ejemplo que muestra lo fácil que es:

public static Test suite() { 
     TestSuite suite = new TestSuite("Sample Tests"); 

     suite.addTest(new SampleTest("testmethod3")); 
     suite.addTest(new SampleTest("testmethod5")); 

     return suite; 
} 
+0

Su ejemplo ejecutará todos los métodos de prueba en SampleTest.class. Sin embargo, ¿qué pasa si en SampleTest.class tengo varios métodos de prueba [testmethod1(), testmethod2(), ...] y solo con para ejecutar testmethod3() y testmethod5(); sería esto posible? – kmccoy

+1

@K McCoy: He editado mi ejemplo para que coincida con sus requisitos :) – Lukasz

+1

He probado el código anterior y anoté dos cosas: (1) La primera línea debería decir: suite estática de TestSuite pública() { (2) Dentro de la clase SampleTest uno necesita definir el constructor public SampleTest (String name) { super(name); } De lo contrario, esto me sirvió de algo. ¡Gracias! – kmccoy

0

Hay una serie de métodos para esto, pero depende de sus necesidades específicas. Por ejemplo, se podría dividir cada uno de sus métodos de prueba en clases separadas de prueba, una d luego organícelos en diferentes suites de prueba (lo que permitiría la superposición de métodos en las suites si así lo desea). O bien, una solución más simple sería hacer que sus métodos de prueba sean métodos de clase normales con un método de prueba en su clase que los llame en su orden específico. ¿Quieres que se llamen dinámicamente?

2

This answer le indica cómo hacerlo. ¡Aleatorizar el orden en que se ejecutan las pruebas es una buena idea!

Al igual que el comentario de los estados de dom farr, cada prueba unitaria debe poder ejecutarse aisladamente. No debe haber residuos ni requisitos dados después o antes de una ejecución de prueba. Todas las pruebas unitarias deben pasar en cualquier orden o subconjunto.

No es una idea terrible tener o generar un mapa de Caso de prueba -> Lista de prueba y luego ejecutar al azar todas las pruebas.

0

No llevo tanto tiempo usando Java, pero, por lo que he visto, no hay un método conveniente de marcar métodos para ejecutarlos en lugar de ignorarlos. En cambio, creo que esto podría lograrse con el IDE. Cuando quiero hacer eso en Eclipse puedo usar la vista junit para ejecutar pruebas individuales haciendo clic en ellas. Me imagino que hay algo similar en Netbeans.

No conozco una manera fácil de reordenar la ejecución de la prueba. Eclipse tiene un botón para volver a ejecutar las pruebas con las pruebas que fallan primero, pero parece que quiere algo más versátil.

Cuestiones relacionadas