Aby test neselhal na první assert (JUnit 5)
Už jsem psal o tom, jak v JUnit 4 dosáhnout toho, aby test neselhal na první assert. JUnit 5 již dosáhl milestone 2 (podrobnosti v článku JUnit 5 State Of The Union), tak je potřeba se podívat, jak s novou verzí API dosáhnout téhož.
Jsem zastáncem toho, aby jednotlivé testy byly co nejkratší a samozřejmě na sobě nezávislé. Raději napíšu deset testovacích metod s jedním assertem, 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ě integračních testů, například Selenium (WebDriver). 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 informací, aniž byste museli test znovu a znovu opakovat?
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ásleduje 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é nesrovnalosti hned na prvním poli. Zaměřte svou pozornost na řádky číslo 27 až 30.
JUnit 5 ještě neexistuje jako oficiální release, zatím jen milestone 2. Přesto je dobré vědět, na co se připravit. 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