AI voor het genereren van tests: Waar het helpt en waar het tekortschiet

AI schrijft snel tests. Het schrijft ook tests die er echt uitzien, maar de verkeerde dingen verifiëren.

Je plakt een functie in een AI. Dertig seconden later heb je twaalf passerende tests. Je coverage-score gaat omhoog. Je voelt je productief.

Dan treedt er een bug op in productie. Je kijkt naar die twaalf tests en beseft dat geen van hen deze had opgemerkt.

De AI testte wat je code doet, niet wat je code zou moeten doen.

AI is nuttig, maar je moet weten hoe je het moet gebruiken.

Waar AI wint:

  • Het genereren van boilerplate, zoals setup- en teardown-blokken.
  • Het schrijven van repetitieve factory helpers en data-objecten.
  • Het creëren van vele variaties op een enkel goed testpatroon.
  • Het afhandelen van voor de hand liggende edge cases zoals null, lege strings of nul.

Waar AI faalt:

  • Implementatie-gebaseerde tests: Het schrijft tests die de codestructuur volgen in plaats van de businesslogica. Als je de code refactort, breken de tests, zelfs als het resultaat nog steeds correct is.
  • Oppervlakkige edge cases: Het vindt voor de hand liggende fouten, maar mist domeinspecifieke bugs. Het kent je tijdzone-eigenaardigheden, je databasebeperkingen of je specifieke bedrijfsregels niet.
  • Broze mocks: Het mockt interne services die echt zouden moeten blijven. Dit maakt tests traag in onderhoud en gemakkelijk te breken tijdens refactors.

Hoe je AI gebruikt zonder "testtheater" te creëren:

  1. Definieer eerst het contract. Schrijf één zin in eenvoudige taal over wat de test moet bewijzen. Voorbeeld: "Een verlopen code moet het oorspronkelijke bedrag retourneren."
  2. Geef die zin aan de AI. Laat de AI de code schrijven, maar jij moet de intentie bewaken.
  3. Mock alleen op de grens. Gebruik echte instanties voor je interne modules. Mock alleen externe API's of databases.
  4. Schrijf één domein-edge case met de hand. AI handelt de "voor de hand liggende" randgevallen af. Jij moet de "3 uur 's nachts"-randgevallen afhandelen die daadwerkelijk incidenten in productie veroorzaken.

Laat de AI niet beslissen wat de test verifieert. Gebruik het om de code te typen, maar jij levert de logica.

Bron: https://dev.to/nazar_boyko/ai-for-test-generation-where-it-helps-and-where-it-lies-jhm