2011-10-21 9 views
7

He intentado crear un conjunto de pruebas personalizado creando un suiterunner que extienda runner. En el conjunto de pruebas que está anotado con @RunWith(suiterunner.class), me refiero a las clases de prueba que deben ejecutarse.implementación junit de varios corredores

Dentro de la clase de prueba necesito repetir una prueba en particular, para hacerlo estoy usando la solución como se menciona aquí: http://codehowtos.blogspot.com/2011/04/run-junit-test-repeatedly.html. pero dado que he creado un suiterunner que desencadena la clase de prueba y dentro de esa clase de prueba estoy implementando @RunWith(ExtendedRunner.class), se produce un error de inicialización.

Necesito ayuda para gestionar estos 2 corredores y también hay alguna forma de combinar 2 corredores para una prueba en particular? ¿Hay alguna otra forma de resolver este problema o una forma más fácil de seguir adelante?

+0

¿Puede proporcionar un error completo y un stacktrace? Debería funcionar como lo describiste. –

Respuesta

2

En caso de que esté utilizando la última JUnit, es posible que @Rules sea una solución mucho más limpia para su problema. Aquí hay una muestra;

Imagine que esta es su aplicación;

package org.zero.samples.junit; 

/** 
* Hello world! 
* 
*/ 
public class App { 
    public static void main(String[] args) { 
    System.out.println(new App().getMessage()); 
    } 

    String getMessage() { 
    return "Hello, world!"; 
    } 
} 

Esta es su clase de prueba;

package org.zero.samples.junit; 

import static org.junit.Assert.*; 

import org.junit.Rule; 
import org.junit.Test; 

/** 
* Unit test for simple App. 
*/ 
public class AppTest { 

    @Rule 
    public RepeatRule repeatRule = new RepeatRule(3); // Note Rule 

    @Test 
    public void testMessage() { 
    assertEquals("Hello, world!", new App().getMessage()); 
    } 
} 

Cree una clase de regla como;

package org.zero.samples.junit; 

import org.junit.rules.TestRule; 
import org.junit.runner.Description; 
import org.junit.runners.model.Statement; 

public class RepeatRule implements TestRule { 

    private int repeatFor; 

    public RepeatRule(int repeatFor) { 
    this.repeatFor = repeatFor; 
    } 

    public Statement apply(final Statement base, Description description) { 
    return new Statement() { 

     @Override 
     public void evaluate() throws Throwable { 
     for (int i = 0; i < repeatFor; i++) { 
      base.evaluate(); 
     } 
     } 
    }; 
    } 

} 

ejecutar su caso de prueba como de costumbre, sólo que esta vez los casos de prueba se repite para el número determinado de veces. Es posible que encuentre casos de uso interesantes en los que @rule realmente pueda resultar útil. Intenta crear reglas compuestas, juega a tu alrededor seguramente se pegará ...

Espero que ayude.