Gelten '@Regel' nach jedem '@Test' und vor jedem '@Nach' in JUnit

Habe ich eine test-suite, wo ich mich Abmelden vom system in @After und schließen des browser in @AfterClass. Ich versuche, mit @Rule zu nehmen fehlgeschlagenen test screenshot mit Selenium für jede test-Methode. Ich habe manuell geprüft, dass @Rule läuft nur vor jedem @Before aber ich möchte es einrichten, nach @Test und vor @After. Ich konnte nicht herausfinden einfache Lösung. Jede Hilfe wird geschätzt.

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

Den Ausgang bin ich immer

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
  • Erwähnte ich, ich will nur nehmen Sie Bildschirm-Aufnahme nur, wenn ein test fehlschlägt. Nicht für jeden test 😀
  • Komisch. Ich war nur daran interessiert, in der Reihenfolge, so dass es eigentlich deine Frage war meine Antwort 🙂
  • Ich bin froh!
  • tatsächlich ist die gezeigte Reihenfolge nicht korrekt ist, da es nur zeigt, wenn die Regel instanziiert wird, nicht, wenn es angewendet wird. Der richtige test wäre nicht ein constuctor in der Regel bei allen, aber nennen arg0.evaluate() Protokollierung vor und nach dem Aufruf. Dies würde zeigen, dass die Regel ausgeführt wird, um @Before / @After wie auch schon in der JavaDoc von JUnit.
InformationsquelleAutor Reaz Patwary | 2012-08-22
Schreibe einen Kommentar