JUnit result interceptor
Před nějakou dobou jsme psali o vlastní anotaci @AfterFailure v JUnit testech. Naší motivací byly screenshoty neúspěšných selenium testů. JUnit od verze 4.7 má svoje řešení jménem TestWatchman.
TestWatchman je v podstatě interceptor, který můžete zavěsit na události failed, finished, starting a succeeded. Ukažme si na následujícím příkladě, jak zareagovat na neúspěšný test a zjistit jméno třídy a název testu. Tento string používáme jako jméno screenshotu v našich selenium testech. Metoda failed se volá jak při assertationFailed tak při výjimce.
import static junit.framework.Assert.fail;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.MethodRule;
import org.junit.rules.TestWatchman;
import org.junit.runners.model.FrameworkMethod;
public class MyTest {
@Rule
public MethodRule watchman = new TestWatchman() {
@Override
public void failed(Throwable e, FrameworkMethod method) {
String methodName = MyTest.this.getClass().getSimpleName() + "." + method.getName();
System.out.println(methodName + " has failed!");
}
};
@Test
public void testFailed() {
fail();
}
}
TestWatchman už je deprecated, navíc se volá až po @After. Řešením je RuleChain od verze JUnit 4.10 http://blog.zvestov.cz/item/98