Skip to main content

JUnit 5 (Ukázka, strana 99)

Page 1

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


Turn static files into dynamic content formats.

Create a flipbook
JUnit 5 (Ukázka, strana 99) by Kosmas-CZ - Issuu