98 Výpis 6.6:
JUnit 5 – JednotkovĂŠ testovĂĄnĂ na platformÄ› Java Definice testovacĂ tĹ™Ădy TestParamDemo
1 @DisplayName("PouĹžitĂ doplĹˆkovĂ˝ch parametrĹŻ") 2 public class TestParamDemo 3 { 4 @BeforeAll 5 @DisplayName("PĹ™Ăprava pĹ™ed testy danĂŠ tĹ™Ădy") 6 static void setUpClass(TestInfo info, TestReporter reporter) { 7 print("BeforeAll", info); 8 reporter.publishEntry("BeforeAll", "VytvĂĄĹ™Ăm pĹ™Ăpravek pro celou sadu"); 9 } 10 11 @AfterAll 12 @DisplayName("Ăšklid po testech danĂŠ tĹ™Ădy") 13 static void tearDownClass(TestInfo info, TestReporter reporter) { 14 print("AfterAll", info); 15 reporter.publishEntry("AfterAll", "UklĂzĂm po ukoÄ?nenĂ sady"); 16 } 17 18 TestParamDemo(TestInfo info, TestReporter reporter) { 19 print("Konstruktor", info); 20 reporter.publishEntry("Konstruktor", "VytvĂĄĹ™Ăm instanci"); 21 } 22 23 @BeforeEach 24 @DisplayName("Tvorba pĹ™Ăpravku") 25 void setUp(TestInfo info, TestReporter reporter) { 26 reporter.publishEntry("Before", "VytvĂĄĹ™Ăm pĹ™Ăpravek"); 27 print(" BeforeEach", info); 28 } 29 30 @AfterEach 31 @DisplayName("Ăšklid po testu") 32 void tearDown(TestInfo info, TestReporter reporter) { 33 reporter.publishEntry("After", "UklĂzĂm"); 34 print(" AfterEach", info); 35 } 36 37 @Test 38 @DisplayName("PrvnĂ test đ&#x;˜Šđ&#x;˜Š") 39 void test_1(TestInfo info) { 40 print(" Test", info); 41 } 42 43 @Test 44 @DisplayName("DruhĂ˝ test ☚") 45 void test_2(TestInfo info, TestReporter reporter) { 46 reporter.publishEntry(Map.of("1", "Jedna", "2", "Dva")); 47 reporter.publishEntry("PodruhĂŠ", "DruhĂŠ pouĹžitĂ"); 48 print(" Test", info); 49 } 50 54G_JUnit 5_ZLOM.doc; verze 0.41.7696 – 2018-09-21
Strana 98 z 291 UkĂĄzka elektronickĂŠ knihy, UID: KOS260142
6 Základní užitečné anotace
99
51 @Test 52 void testWithoutDN(TestInfo info, TestReporter reporter) { 53 print(" Test", info); 54 } 55 56 @DisplayName("Soukromá metoda") 57 private static void print(String msg, TestInfo info) { 58 String clsName = info.getTestClass() 59 .orElse(NENI.class) 60 .getSimpleName(); 61 String mtdName = info.getTestMethod().isPresent() 62 ? info.getTestMethod().get().getName() 63 : "žádná"; 64 System.out.println(msg 65 + ": Display:" + info.getDisplayName() 66 + ", Method:" + mtdName 67 + ", Class:" + clsName 68 ); 69 } 70 } 71 72 class NENI {} Jak asi víte, jedním z cílů tohoto datového typu je omezit používání prázdného odkazu null. Pro případ, že by instance TestInfo neobsahovala žádný objekt reprezentující metodu, je na řádcích 61-63 použit ternární výraz, který buď vrátí název zastupované metody, anebo řetězec „žádná“. Kód pro získání názvu třídy řeší problém případné neexistence obalovaného objektu maličko jinak. Metoda orElse(?) na řádku 59 vrátí buď class-objekt příslušné třídy, a neexistuje-li taková, vrátí class-objekt speciální třídy NENI, která je pro tento účel definována na řádku 72. Jak se můžete přesvědčit, v definici třídy TestParamDemo jsme všechny organizační i testovací metody anotovali pomocí @DisplayName a všem jsme současně deklarovali parametr typu TestInfo. Metodám typu @BeforeEach, @AfterEach a @Test jsme navíc deklarovali parametr typu TestReporter. Oba parametry má deklarované i konstruktor definovaný na řádcích 18-21. V závěrečném souhrnu, který najdete ve výpisu 6.7, si můžete zkontrolovat, které z těchto použití se v něm projeví a jak. Ze závěrečného výpisu vyplývá: • Anotace @DisplayName Tuto anotaci má opravdu smysl používat pouze u testovacích tříd a metod. • Bez anotace @DisplayName Ve výpisu 6.6 na stránce 98 je na řádcích 51-54 definována testovací metoda neanotovaná anotací @DisplayName. Všimněte si, že v závěrečné zprávě je název metody doplněn o seznam typů jejích parametrů – viz řádky 11-13 a řádek 33 ve výpisu 6.7. 54G_JUnit 5_ZLOM.doc; verze 0.41.7696 – 2018-09-21
Strana 99 z 291 Ukázka elektronické knihy, UID: KOS260142
100 Výpis 6.7:
JUnit 5 – JednotkovĂŠ testovĂĄnĂ na platformÄ› Java VĂ˝stup testĹŻ TestParamDemo a ĂşvodnĂ strom ze zĂĄvÄ›reÄ?nĂŠho souhrnu
1 BeforeAll: Display:PouĹžitĂ doplĹˆkovĂ˝ch parametrĹŻ, Method:ŞådnĂĄ, Class:TestParamDemo 2 Konstruktor: Display:PouĹžitĂ doplĹˆkovĂ˝ch parametrĹŻ, Method:ŞådnĂĄ, Class:TestParamDemo 3 BeforeEach: Display:PrvnĂ test đ&#x;˜Šđ&#x;˜Š, Method:test_1, Class:TestParamDemo 4 Test: Display:PrvnĂ test đ&#x;˜Šđ&#x;˜Š, Method:test_1, Class:TestParamDemo 5 AfterEach: Display:PrvnĂ test đ&#x;˜Šđ&#x;˜Š, Method:test_1, Class:TestParamDemo 6 Konstruktor: Display:PouĹžitĂ doplĹˆkovĂ˝ch parametrĹŻ, Method:ŞådnĂĄ, Class:TestParamDemo 7 BeforeEach: Display:DruhĂ˝ test ☚, Method:test_2, Class:TestParamDemo 8 Test: Display:DruhĂ˝ test ☚, Method:test_2, Class:TestParamDemo 9 AfterEach: Display:DruhĂ˝ test ☚, Method:test_2, Class:TestParamDemo 10 Konstruktor: Display:PouĹžitĂ doplĹˆkovĂ˝ch parametrĹŻ, Method:ŞådnĂĄ, Class:TestParamDemo 11 BeforeEach: Display:testWithoutDN(TestInfo, TestReporter), Method:testWithoutDN, Class:TestParamDemo 12 Test: Display:testWithoutDN(TestInfo, TestReporter), Method:testWithoutDN, Class:TestParamDemo 13 AfterEach: Display:testWithoutDN(TestInfo, TestReporter), Method:testWithoutDN, Class:TestParamDemo 14 AfterAll: Display:PouĹžitĂ doplĹˆkovĂ˝ch parametrĹŻ, Method:ŞådnĂĄ, Class:TestParamDemo 15 ╡ 16 ├─ JUnit Jupiter ✔ 17 │ └─ PouĹžitĂ doplĹˆkovĂ˝ch parametrĹŻ ✔ 18 │ 2018-08-25T11:41:39.863540300 BeforeAll = `VytvĂĄĹ™Ăm pĹ™Ăpravek pro celou sadu` 19 │ 2018-08-25T11:41:39.867528400 Konstruktor = `VytvĂĄĹ™Ăm instanci` 20 │ 2018-08-25T11:41:39.882489600 Konstruktor = `VytvĂĄĹ™Ăm instanci` 21 │ 2018-08-25T11:41:39.886478800 Konstruktor = `VytvĂĄĹ™Ăm instanci` 22 │ 2018-08-25T11:41:39.890467900 AfterAll = `UklĂzĂm po ukoÄ?nenĂ sady` 23 │ ├─ PrvnĂ test đ&#x;˜Šđ&#x;˜Š ✔ 24 │ │ 2018-08-25T11:41:39.873514100 Before = `VytvĂĄĹ™Ăm pĹ™Ăpravek` 25 │ │ 2018-08-25T11:41:39.878500100 After = `UklĂzĂm` 26 │ ├─ DruhĂ˝ test ☚ ✔ 27 │ │ 2018-08-25T11:41:39.884484 Before = `VytvĂĄĹ™Ăm pĹ™Ăpravek` 28 │ │ 2018-08-25T11:41:39.884484 29 │ │ 2 = `Dva` 30 │ │ 1 = `Jedna` 31 │ │ 2018-08-25T11:41:39.884484 PodruhĂŠ = `DruhĂŠ pouĹžitĂ` 32 │ │ 2018-08-25T11:41:39.885481200 After = `UklĂzĂm` 33 │ └─ testWithoutDN(TestInfo, TestReporter) ✔ 34 │ 2018-08-25T11:41:39.887476300 Before = `VytvĂĄĹ™Ăm pĹ™Ăpravek` 35 │ 2018-08-25T11:41:39.888472800 After = `UklĂzĂm` 36 └─ JUnit Vintage ✔
54G_JUnit 5_ZLOM.doc; verze 0.41.7696 – 2018-09-21
Strana 100 z 291 UkĂĄzka elektronickĂŠ knihy, UID: KOS260142