Stručný sprievodca k @DirtiesContext

1. Prehľad

V tomto rýchlom výučbe sa dozvieme viac o @DirtiesContext anotácia. Ukážeme tiež štandardný spôsob použitia anotácie na testovanie.

2. @DirtiesContext

@DirtiesContext je a Anotácia jarného testovania. Označuje, že priradený test alebo trieda upravuje ApplicationContext. Hovorí testovaciemu rámci, aby uzavrel a znovu vytvoril kontext pre neskoršie testy.

Môžeme anotovať testovaciu metódu alebo celú triedu. Nastavením MethodMode alebo ClassMode, môžeme kontrolovať, kedy Spring označuje kontext na uzavretie.

Ak umiestnime @DirtiesContext na hodine sa anotácia týka každej metódy v triede s daným ClassMode.

3. Testovanie bez vyčistenia kontextu pružiny

Povedzme, že máme Používateľ:

verejná trieda Používateľ {String firstName; Reťazec priezvisko; }

Máme tiež veľmi jednoduché UserCache:

@ Komponenta verejná trieda UserCache {@Získajte súkromné ​​Nastaviť zoznam používateľov = nová HashSet (); public boolean addUser (String user) {return userList.add (user); } public void printUserList (reťazcová správa) {System.out.println (správa + ":" + userList); }}

Vytvoríme integračný test na načítanie a otestovanie celej aplikácie:

@TestMethodOrder (OrderAnnotation.class) @ExtendWith (SpringExtension.class) @SpringBootTest (classes = SpringDataRestApplication.class) trieda DirtiesContextIntegrationTest {@Autowired chránená UserCache userCache; ...}

Prvá metóda, addJaneDoeAndPrintCache, pridá záznam do cache:

@Test @Order (1) void addJaneDoeAndPrintCache () {userCache.addUser ("Jane Doe"); userCache.printUserList ("addJaneDoeAndPrintCache"); }

Po pridaní používateľa do medzipamäte vytlačí obsah medzipamäte:

addJaneDoeAndPrintCache: [Jane Doe]

Ďalšie, printCache znova vypíše vyrovnávaciu pamäť používateľa:

@Test @Order (2) void printCache () {userCache.printUserList ("printCache"); }

Obsahuje názov pridaný v predchádzajúcom teste:

printCache: [Jane Doe]

Povedzme, že neskorší test sa pri niektorých tvrdeniach opieral o prázdnu vyrovnávaciu pamäť. Predtým vložené názvy môžu spôsobiť nežiaduce správanie.

4. Používanie @DirtiesContext

Teraz sa ukážeme @DirtiesContext s predvoleným nastavením MethodMode, AFTER_METHOD. To znamená, že jar označí kontext na uzavretie po dokončení príslušnej testovacej metódy.

Aby sme izolovali zmeny v teste, pridávame @DirtiesContext. Pozrime sa, ako to funguje.

The addJohnDoeAndPrintCache testovacia metóda pridá používateľa do medzipamäte. Pridali sme tiež @DirtiesContext anotácia, ktorá hovorí, že kontext by sa mal na konci testovacej metódy vypnúť:

@DirtiesContext (methodMode = MethodMode.AFTER_METHOD) @Test @Order (3) void addJohnDoeAndPrintCache () {userCache.addUser ("John Doe"); userCache.printUserList ("addJohnDoeAndPrintCache"); }

Výstup je teraz:

addJohnDoeAndPrintCache: [John Doe, Jane Doe]

Nakoniec printCacheAgain znova vypíše vyrovnávaciu pamäť:

@Test @Order (4) void printCacheAgain () {userCache.printUserList ("printCacheAgain"); }

Po spustení celej testovacej triedy vidíme medzi tým opätovné načítanie jarného kontextu addJohnDoeAndPrintCache a printCacheAgain. Vyrovnávacia pamäť sa teda znova inicializuje a výstup je prázdny:

printCacheAgain: []

5. Ďalšie podporované testovacie fázy

Vyššie uvedený príklad ukazuje po súčasnej skúšobnej metóde fáza. Poďme si rýchlo zhrnúť fázy:

5.1. Úroveň triedy

The ClassMode možnosti pre testovaciu triedu definujú, kedy sa kontext vynuluje:

  • BEFORE_CLASS: Pred súčasnou skúšobnou triedou
  • BEFORE_EACH_TEST_METHOD: Pred každou skúšobnou metódou v súčasnej skúšobnej triede
  • AFTER_EACH_TEST_METHOD: Po každej testovacej metóde v aktuálnej testovacej triede
  • PO HODINE: Po aktuálnej testovacej triede

5.2. Úroveň metódy

The MethodMode možnosti pre individuálnu metódu definujú, kedy sa kontext vynuluje:

  • BEFORE_METHOD: Pred súčasnou skúšobnou metódou
  • AFTER_METHOD: Po súčasnej skúšobnej metóde

6. Záver

V tomto článku sme predstavili @DirtiesContext testovacia anotácia.

Vzorový kód je ako vždy k dispozícii na GitHub.


$config[zx-auto] not found$config[zx-overlay] not found