En rask guide til @DirtiesContext

1. Oversikt

I denne raske opplæringen lærer vi om @DirtiesContext kommentar. Vi viser også en standard måte å bruke merknaden på for å teste.

2. @DirtiesContext

@DirtiesContext er en Kommentar om vårprøving. Det indikerer at den tilhørende testen eller klassen endrer ApplicationContext. Den forteller testrammeverket for å lukke og gjenskape konteksten for senere tester.

Vi kan kommentere en testmetode eller en hel klasse. Ved å stille inn MethodMode eller ClassMode, vi kan kontrollere når våren markerer konteksten for nedleggelse.

Hvis vi plasserer @DirtiesContext på en klasse gjelder merknaden for hver metode i klassen med det gitte ClassMode.

3. Testing uten å fjerne vårkonteksten

La oss si at vi har en Bruker:

offentlig klasse bruker {String firstName; Strengens etternavn; }

Vi har også en veldig enkel UserCache:

@Component public class UserCache {@Getter private Set userList = new HashSet (); offentlig boolsk addUser (strengbruker) {return userList.add (bruker); } public void printUserList (String message) {System.out.println (message + ":" + userList); }}

Vi oppretter en integrasjonstest for å laste opp og teste hele applikasjonen:

@TestMethodOrder (OrderAnnotation.class) @ExtendWith (SpringExtension.class) @SpringBootTest (classes = SpringDataRestApplication.class) klasse DirtiesContextIntegrationTest {@Autowired beskyttet UserCache userCache; ...}

Den første metoden, addJaneDoeAndPrintCache, legger til en oppføring i hurtigbufferen:

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

Etter å ha lagt til en bruker i hurtigbufferen, skriver den ut innholdet i hurtigbufferen:

addJaneDoeAndPrintCache: [Jane Doe]

Neste, printCache skriver ut brukerbufferen igjen:

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

Den inneholder navnet som ble lagt til i forrige test:

printCache: [Jane Doe]

La oss si at en senere test var avhengig av en tom cache for noen påstander. De tidligere innsatte navnene kan forårsake uønsket oppførsel.

4. Bruke @DirtiesContext

Nå skal vi vise @DirtiesContext med standardinnstillingen MethodMode, ETTER_METHOD. Dette betyr at våren vil markere konteksten for lukking etter at den tilsvarende testmetoden er fullført.

For å isolere endringer i en test, legger vi til @DirtiesContext. La oss se hvordan det fungerer.

De addJohnDoeAndPrintCache testmetoden legger til en bruker i hurtigbufferen. Vi har også lagt til @DirtiesContext kommentar, som sier at konteksten skal lukkes på slutten av testmetoden:

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

Resultatet er nå:

addJohnDoeAndPrintCache: [John Doe, Jane Doe]

Endelig, printCacheAgain skriver ut hurtigbufferen igjen:

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

Når vi kjører hele testklassen, ser vi vårkonteksten lastes inn i mellom addJohnDoeAndPrintCache og printCacheAgain. Så hurtigbufferen starter på nytt, og utgangen er tom:

printCacheAgain: []

5. Andre støttede testfaser

Eksemplet ovenfor viser etter gjeldende testmetode fase. La oss gjøre et raskt sammendrag av fasene:

5.1. Klassenivå

De ClassMode alternativer for en testklasse definerer når konteksten tilbakestilles:

  • FØR_KLASS: Før nåværende testklasse
  • FØR_EACH_TEST_METHOD: Før hver testmetode i gjeldende testklasse
  • AFTER_EACH_TEST_METHOD: Etter hver testmetode i gjeldende testklasse
  • ETTER TIMEN: Etter dagens testklasse

5.2. Metodenivå

De MethodMode alternativer for en individuell metode definerer når konteksten tilbakestilles:

  • FØR_METHOD: Før den nåværende testmetoden
  • ETTER_METHOD: Etter gjeldende testmetode

6. Konklusjon

I denne artikkelen presenterte vi @DirtiesContext teste kommentar.

Som alltid er eksempelkoden tilgjengelig på GitHub.


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