Již dvakrát jsem psal o tom, jak na interceptor JUnit testů. Mojí motivací byly screenshoty Selenium testů, ale jen když selžou. Prvním způsobem je vlastní anotace @AfterFailure, což mimo jiné vyžaduje i vlastní test runner. V pozdější verzi JUnit se objevila třída TestWatchman (již deprecated). Největší nevýhodou bylo, že se volá až po metodě anotované @After. Což nevadí do té doby, než se rozhodnete v této metodě zavřít prohlížeč (výsledný screenshot je pak pochopitelně k ničemu). V JUnit verze 4.10 byla naštěstí přidána mocná třída RuleChain.

Nejen v případě Selenium testů použijeme implementace rozhraní TestRule a to konkrétně třídy ExternalResource, TestWatcher a nakonec RuleChain, třída která určuje pořadí jednotlivých TestRule.




Po spuštění příkladu dostanete následující výstup.

start server
before
test a
after
Screenshot of the failed test SampleTest#testA
stop server
start server
before
test b
after
stop server

JUnit nabízí víc možností než jen @Before, @Test a @After. Nezapomeňte se proto podívat i na ostatní implementace rozhraní TestRule.