En hurtig guide til @DirtiesContext

1. Oversigt

I denne hurtige vejledning lærer vi om @DirtiesContext kommentar. Vi viser også en standard måde at bruge kommentaren til test på.

2. @DirtiesContext

@DirtiesContext er en Annotering om forårstest. Det angiver, at den tilknyttede test eller klasse ændrer ApplicationContext. Det fortæller testrammen at lukke og genskabe konteksten til senere tests.

Vi kan kommentere en testmetode eller en hel klasse. Ved at indstille MethodMode eller ClassMode, vi kan kontrollere, hvornår Spring markerer konteksten for lukning.

Hvis vi placerer @DirtiesContext på en klasse gælder annoteringen for hver metode i klassen med det givne ClassMode.

3. Test uden at rydde forårssammenhængen

Lad os sige, at vi har en Bruger:

offentlig klasse Bruger {String firstName; Streng efternavn; }

Vi har også en meget enkel UserCache:

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

Vi opretter en integrationstest for at indlæse og teste den fulde applikation:

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

Den første metode, addJaneDoeAndPrintCache, tilføjer en post til cachen:

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

Efter at have tilføjet en bruger til cachen, udskriver den indholdet af cachen:

addJaneDoeAndPrintCache: [Jane Doe]

Næste, printCache udskriver brugerens cache igen:

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

Den indeholder navnet tilføjet i den forrige test:

printCache: [Jane Doe]

Lad os sige, at en senere test var afhængig af en tom cache for nogle påstande. De tidligere indsatte navne kan forårsage uønsket adfærd.

4. Brug @DirtiesContext

Nu viser vi det @DirtiesContext med standardindstillingen MethodMode, AFTER_METHOD. Dette betyder, at Spring markerer konteksten for lukning, når den tilsvarende testmetode er afsluttet.

For at isolere ændringer til en test tilføjer vi @DirtiesContext. Lad os se, hvordan det fungerer.

Det addJohnDoeAndPrintCache testmetode tilføjer en bruger til cachen. Vi har også tilføjet @DirtiesContext kommentar, der siger, at konteksten skal lukkes i slutningen af ​​testmetoden:

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

Outputtet er nu:

addJohnDoeAndPrintCache: [John Doe, Jane Doe]

Langt om længe, printCacheAgain udskriver cachen igen:

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

Når vi kører den fulde testklasse, ser vi Spring context genindlæst imellem addJohnDoeAndPrintCache og printCacheAgain. Så cachen geninitialiseres, og output er tom:

printCacheAgain: []

5. Andre understøttede testfaser

Eksemplet ovenfor viser efter den nuværende testmetode fase. Lad os lave en hurtig oversigt over faser:

5.1. Klasseniveau

Det ClassMode indstillinger for en testklasse definerer, hvornår konteksten nulstilles:

  • FØR_KLASS: Før nuværende testklasse
  • FØR_EACH_TEST_METHOD: Før hver testmetode i den aktuelle testklasse
  • AFTER_EACH_TEST_METHOD: Efter hver testmetode i den aktuelle testklasse
  • EFTER SKOLE: Efter den nuværende testklasse

5.2. Metodeniveau

Det MethodMode indstillinger for en individuel metode definerer, hvornår konteksten nulstilles:

  • FØR_METHOD: Før den nuværende testmetode
  • AFTER_METHOD: Efter den aktuelle testmetode

6. Konklusion

I denne artikel præsenterede vi @DirtiesContext teste annotering.

Som altid er eksempelkoden tilgængelig på GitHub.


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