Luboš Račanský
20.7.2010

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

Vaše emailová adresa nebude zveřejněna

Komentáře

Děkujeme za váš komentář
Další
  • 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