Už jsem psal o tom, jak v JUnit 4 dosáh­nout toho, aby test neselhal na první assert. JUnit 5 již dosáhl miles­tone 2 (podrob­nosti v článku JUnit 5 State Of The Union), tak je potřeba se podívat, jak s novou verzí API dosáh­nout téhož.

Jsem zastáncem toho, aby jednot­livé testy byly co nejkratší a samozřejmě na sobě nezávislé. Raději napíšu deset testo­vacích metod s jedním asser­tem, než jednu metodu s deseti asserty. Výhodu spatřuji v tom, že při jediném běhu testu vidíte na jediný pohled všechny vadné případy. A ne že opravíte první assert, spustíte test a padne vám hned druhý assert v pořadí.

Jiné je to v případě integ­rač­ních testů, například Selenium (WebD­ri­ver). Samotná příprava dat je náročná, takže je vhodné asserty sdružovat do větších celků. Ale jak z jediného běhu získat co nejvíce infor­mací, aniž byste museli test znovu a znovu opako­vat?

V JUnit 4 existuje rozhraní TestRule, v podobě ErrorCollector. V JUnit 5 už rozhraní Rule nejsou, nicméně tento případ vyřeší assertAll.

assertAll("address",
    () -> assertEquals("John", address.getFirstName()),
    () -> assertEquals("User", address.getLastName())
);

Ukázka

Násle­duje ukázka Selenium testu, který ověřuje, zda mají povinná pole formuláře kolem sebe rámeček určité barvy. Jistě nechcete test ukončit po zjištěné nesrov­na­losti hned na prvním poli. Zaměřte svou pozor­nost na řádky číslo 27 až 30.

JUnit 5 ještě neexi­s­tuje jako oficiální release, zatím jen miles­tone 2. Přesto je dobré vědět, na co se připra­vit. JUnit tým připravil Maven Surefire provider a Gradle plugin, ale jde zatím jen o proof of concept. Co se IDE týče, zkoušel jsem IntelliJ Idea, která JUnit 5 už umí.

Výpis v IntelliJ IDEA

Související