Appliquer '@Règle " après chaque '@Test' et avant chaque '@dans JUnit

J'ai une suite de test où je suis déconnecter du système dans @After et la fermeture du navigateur dans @AfterClass. Je suis en train d'utiliser @Rule de prendre échec au test de capture d'écran à l'aide de Sélénium pour chaque méthode de test. J'ai vérifié manuellement que @Rule ne s'exécute avant chaque @Before mais je veux le mettre en place après @Test et avant @After. Je n'arrivais pas à trouver la solution la plus simple. Toute aide sera appréciée.

public class MorgatgeCalculatorTest  {

@Before
public void before(){
    System.out.println("I am before");
}
@BeforeClass
public static void beforeclass(){
    System.out.println("I am beforeclass");
}
@Test
    public void test(){
        System.out.println("I am Test");
    }
@Test
public void test2(){
    System.out.println("I am Test2");
}
@After
    public void after(){
        System.out.println("I am after");
    }
@AfterClass
        public static  void afterclass(){
            System.out.println("I am afterclass");

}
@Rule
ExpensiveExternalResource ExpensiveExternalResource = new ExpensiveExternalResource();

static class ExpensiveExternalResource implements MethodRule  {
    public ExpensiveExternalResource(){
        System.out.println("I am rule");
    }

    @Override
    public Statement apply(Statement arg0, FrameworkMethod arg1, Object arg2) {
        //TODO Auto-generated method stub
        return null;
    }    
}               

La sortie que je reçois est

I am beforeclass
I am rule
I am before
I am Test
I am after
I am rule
I am before
I am Test2
I am after
I am afterclass
  • Je l'ai mentionné je ne veux prendre la capture d'écran que lorsqu'un test échoue. Pas pour tous les tester 😀
  • Drôle. J'étais seulement intéressé dans l'ordre, donc, en fait, votre question a été ma réponse 🙂
  • Je suis heureux!
  • en fait l'ordre indiqué n'est pas correct, car il ne s'affiche que lorsque la règle est instancié, pas lorsqu'il est appliqué. Le bon test n'aurait pas un constuctor dans la Règle, mais l'appel arg0.evaluate() journalisation avant et après l'appel. Ce serait montrer que la règle est de courir autour de @Before / @After comme est aussi mentionné dans la JavaDoc de JUnit.
InformationsquelleAutor Reaz Patwary | 2012-08-22