"Arrange-Act-Assert (AAA-patroon) is niet alleen geschikt voor unit tests. Het werkt voor elke soort test, inclusief high-level tests."
Arrange als een Speedrun
Niet alle delen van een test zijn even nuttig. In de ideale wereld gebruiken onze testen alleen de Act- en Assert-fases. De Arrange-fase bestaat alleen zodat we later kunt Act-en. Besteed daarom zo min mogelijk tijd aan de Arrange-fase.
Arrange – Act – Assert
Doe in de Arrange-fase zo min mogelijk in de GUI, gebruik nep-data waar mogelijk, sla processtappen over wanneer dit kan én neem zoveel mogelijk shortcuts. Zo kun je snel door naar wat er echt toe doet: de Act- en Assert-fases.
Een veelvoorkomend voorbeeld zijn testgebruikers. Stel dat je de functionaliteit voor het aanpassen van wachtwoorden met een nieuw gebruikersaccount wilt testen. In deze test boeit alleen de wachtwoord aanpas functionaliteit ons. Het aanmaken van een nieuw account interesseert ons in dit geval niet. Je kunt de gebruiker via de registratieflow in de GUI maken, maar een betere aanpak is om het account direct in de database toe te voegen. Als dat moeilijk is, gebruik dan een API. “Maar Sander, de registratieflow moet ook getest worden!” Ja, maar in een andere test. Daar gaat het in dit geval niet om.
De Clean up-fase
Bij een low-level test, zoals een unit test, zit de volledige applicatie state in-memory. Dit betekent dat (meestal) de status automatisch wordt opgeschoond na je test. Bij high-level tests is dat niet het geval. Hier kun je een vierde fase aan toevoegen:
Arrange – Act – Assert – Clean up
In deze fase ruim je de data op die je tijdens de test hebt gemaakt. Dit kan bijvoorbeeld zijn: test data uit de database verwijderen of gecreëerde bestanden weggooien.
Andere methoden om testgegevens op te ruimen zijn:
- Geplande clean up:
Ruim op in een apart gepland proces. In tegenstelling tot de Clean up-fase hoef je dit slechts één keer in te richten, ongeacht het aantal tests. Bijvoorbeeld: stel dat je tests elke keer nieuwe gebruikers aanmaken; een clean up-proces verwijdert dagelijks testgebruikers ouder dan 7 dagen. - Dangling state:
Ruim vlak voordat de volgende test start op, zodat de clean up onderdeel wordt van de Arrange-fase. Voor meer informatie, lees dan de Cypress-documentatie over dangling state.
Conclusie
Arrange-Act-Assert (AAA-patroon) is niet alleen geschikt voor unit tests. Het werkt voor elke soort test, inclusief high-level tests. Je kunt de Act- en Assert-fases herhalen, de shortcuts nemen in de Arrange-fase én een Clean up-fase toevoegen. Met deze aanpassingen kun je het AAA-patroon gebruiken voor de meest complexe tests.