2011-10-21 10 views
7

Próbowałem stworzyć spersonalizowany zestaw testów, tworząc suiterunner, który rozszerza runner. W pakiecie testowym opatrzonym przypisami @RunWith(suiterunner.class) mam na myśli klasy testowe, które należy wykonać.junitowa implementacja wielu biegaczy

W ramach klasy testowej muszę powtórzyć konkretny test, w tym celu korzystam z rozwiązania opisanego tutaj: http://codehowtos.blogspot.com/2011/04/run-junit-test-repeatedly.html. ale odkąd stworzyłem suiterunner, który wyzwala klasę testową iw tej klasie testowej implementuję @RunWith(ExtendedRunner.class), zgłaszany jest błąd inicjalizacji.

Potrzebuję pomocy w zarządzaniu tymi 2 biegaczami, a także czy istnieje sposób na połączenie 2 biegaczy w konkretnym teście? Czy istnieje inny sposób rozwiązania tego problemu lub łatwiejszy sposób na kontynuowanie?

+0

Czy możesz podać pełny błąd i ślad stosu? Powinno działać tak, jak to opisałeś. –

Odpowiedz

2

Jeśli używasz najnowszego JUnit, możesz @Rules być znacznie czystszym rozwiązaniem problemu. Oto próbka;

Wyobraź sobie, że to twoja aplikacja;

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!"; 
    } 
} 

To jest twoja klasa testowa;

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()); 
    } 
} 

Utwórz klasę reguł takich jak;

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(); 
     } 
     } 
    }; 
    } 

} 

Wykonaj test walizki jak zwykle, tylko tym razem twoje przypadki testowe będą powtarzane przez określoną liczbę razy. Możesz znaleźć ciekawe przypadki użycia, gdzie w @Rule może naprawdę okazać się przydatny. Spróbuj utworzyć złożone reguły, baw się dobrze na pewno zostanie sklejony ..

Nadzieję, że pomaga.