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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aufgrund der Art und Weise, die Regeln eingerichtet sind, können Sie nicht haben in der Regel kommt nach dem @vor dem oder vor dem @nach. Sie können denken Sie an Regeln, wie zum Beispiel Muscheln, die Sie auf den test-Methode. Die erste Schale zu gehen ist @before/@after. Danach die @ - Regeln angewendet werden.
Einen schnellen Weg, das zu tun, was Sie tun möchten, ist zu vermeiden, @Nach insgesamt. In der Regel können so erstellt werden, dass es einen screenshot, wenn eine Methode fehlschlägt, und führen Sie dann deins nach dem code. Es ist nicht ganz so hübsch wie @Nach, aber es funktioniert. (auch ich umgesetzt TestRule weil MethodRule wurde abgeschrieben).
All die Arbeit, die Regel ist getan, in einer Erklärung. Eine org.junit.die Läufer.Modell.Anweisung ist eine Klasse repräsentiert ein Bündel von code. So, hier die gelten Methode erhält das Bündel von code, den Sie setzen eine Schale um. Gelten gibt Ihr Anweisung, die ausgeführt wird, die Bündel von code, die Sie ihm gegeben haben, und umgibt es mit einer try/catch-Anweisung wird die Methode Versagen.
Die Ausgabe für diese Methode ist:
Hoffe, das hilft!
@After
Methode mit Ausgabe, so wird es sichtbar, dass baseStatement.evaluate() tatsächlich verursacht@Before
, dann test-Methode, dann@After
zu laufen.Was über die Verwendung der ExternalResource Regel ?
Sieht aus wie Sie es können, geben Ihnen die nötige Flexibilität, um das, was Sie brauchen.
Und ist dies nicht genau das, was Sie brauchen, werfen Sie einen Blick auf die source code der externen Ressource.
Es ist ziemlich understandble, wie die Umsetzung in der Regel zum Beispiel, dass die Arbeit erst nach der test-Aufruf.