Een beknopte handleiding voor @DirtiesContext

1. Overzicht

In deze korte tutorial leren we over de @DirtiesContext annotatie. We laten ook een standaardmanier zien om de annotatie te gebruiken om te testen.

2. @DirtiesContext

@DirtiesContext is een Annotatie voorjaarstest. Het geeft aan dat de bijbehorende test of klasse de ApplicationContext. Het vertelt het testraamwerk om de context te sluiten en opnieuw te creëren voor latere tests.

We kunnen een testmethode of een hele klas annoteren. Door de MethodMode of ClassMode, we kunnen bepalen wanneer de lente de context markeert voor sluiting.

Als we plaatsen @DirtiesContext op een klasse is de annotatie van toepassing op elke methode in de klasse met het gegeven ClassMode.

3. Testen zonder de lentecontext te wissen

Laten we zeggen dat we een Gebruiker:

openbare klasse Gebruiker {String firstName; String achternaam; }

We hebben ook een heel eenvoudig Gebruikerscache:

@Component openbare klasse UserCache {@Getter private Set userList = new HashSet (); openbare boolean addUser (String-gebruiker) {return userList.add (gebruiker); } public void printUserList (String bericht) {System.out.println (bericht + ":" + gebruikerslijst); }}

We maken een integratietest om de volledige applicatie te laden en te testen:

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

De eerste methode, addJaneDoeAndPrintCache, voegt een item toe aan de cache:

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

Nadat een gebruiker aan de cache is toegevoegd, wordt de inhoud van de cache afgedrukt:

addJaneDoeAndPrintCache: [Jane Doe]

De volgende, printCache drukt de gebruikerscache opnieuw af:

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

Het bevat de naam die in de vorige test is toegevoegd:

printCache: [Jane Doe]

Laten we zeggen dat een latere test voor sommige beweringen op een lege cache vertrouwde. De eerder ingevoegde namen kunnen ongewenst gedrag veroorzaken.

4. Met behulp van @DirtiesContext

Nu zullen we het laten zien @DirtiesContext met de standaard MethodMode, AFTER_METHOD. Dit betekent dat Spring de context voor afsluiting markeert nadat de bijbehorende testmethode is voltooid.

Om wijzigingen in een test te isoleren, voegen we toe @DirtiesContext. Laten we eens kijken hoe het werkt.

De addJohnDoeAndPrintCache testmethode voegt een gebruiker toe aan de cache. We hebben ook de @DirtiesContext annotatie, die zegt dat de context aan het einde van de testmethode moet worden afgesloten:

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

De output is nu:

addJohnDoeAndPrintCache: [John Doe, Jane Doe]

Tenslotte, printCacheAgain drukt de cache opnieuw af:

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

Als we de volledige testklasse uitvoeren, zien we dat de Spring-context tussendoor opnieuw wordt geladen addJohnDoeAndPrintCache en printCacheAgain. Dus de cache wordt opnieuw geïnitialiseerd en de uitvoer is leeg:

printCacheAgain: []

5. Andere ondersteunde testfasen

Het bovenstaande voorbeeld toont de volgens de huidige testmethode fase. Laten we een korte samenvatting van de fasen geven:

5.1. Klasse niveau

De ClassMode opties voor een testklasse bepalen wanneer de context wordt gereset:

  • VOOR KLAS: Vóór de huidige testklasse
  • BEFORE_EACH_TEST_METHOD: Voor elke testmethode in de huidige testklasse
  • AFTER_EACH_TEST_METHOD: Na elke testmethode in de huidige testklasse
  • NA DE LES: Na de huidige testles

5.2. Methode niveau

De MethodMode opties voor een individuele methode bepalen wanneer de context wordt gereset:

  • BEFORE_METHOD: Vóór de huidige testmethode
  • AFTER_METHOD: Na de huidige testmethode

6. Conclusie

In dit artikel hebben we de @DirtiesContext annotatie testen.

Zoals altijd is de voorbeeldcode beschikbaar op GitHub.