Skip to Content

Kunnen we dit niet slimmer oplossen?

Wat als we met automatische tests vooraf kunnen ontdekken dat de API is veranderd? En wat als AI daarna ook nog helpt om de code aan te passen, zonder dat een developer alle logica opnieuw hoeft te schrijven?

Daar draait dit R&D-project om: Test-Driven Development (TDD) combineren met Artificial Intelligence om API-integraties slimmer en robuuster te maken.

Wat is Test-Driven Development (TDD)?

Bij Test-Driven Development schrijf je eerst een test die beschrijft wat je van je code verwacht. Pas daarna schrijf je de daadwerkelijke implementatie. Dit zorgt voor scherpere focus, betere testdekking en minder verrassingen achteraf. De werkwijze is eenvoudig:

Laat de test falen:
De functionaliteit bestaat nog niet, dus de test hoort te falen.
Waarom deze stap? Een falende test bevestigt dat de test zinvol is en dat de functionaliteit nog ontbreekt. Zo voorkom je dat je onbedoeld vertrouwt op een test die niets controleert.

Schrijf de minimale code om de test te laten slagen
Bouw precies wat nodig is om aan de test te voldoen niet meer, niet minder.

Herhaal
Breid je testset uit, verbeter je code, en blijf steeds vanuit gedrag en verwachtingen denken.

Bullet 1

Minder bugs in productie
Door vooraf te testen wat je van je code verwacht, verklein je de kans op fouten achteraf. Je ontdekt problemen eerder en kunt ze gericht oplossen voordat ze live gaan.

Bullet 2

Sneller feedback bij API-wijzigingen
Verandert een externe API onverwacht? Dan faalt je test (mits je die regelmatig draait). Met een geautomatiseerd testproces (bijvoorbeeld via een CI-pipeline) krijg je direct feedback zodra er iets verandert aan de API.

Bullet 3

Betere documentatie van je businesslogica
Tests leggen vast hoe je code zich hoort te gedragen. Daardoor vormen ze een levendige vorm van documentatie die altijd in sync is met de implementatie.

Bullet 4

Voeg AI toe, en je bespaart ontwikkeltijd
AI kan helpen bij het schrijven of aanpassen van code op basis van testresultaten. Zo los je fouten sneller op zonder dat je alle logica zelf hoeft te herschrijven.

Technische implementatie: TDD + AI + Umbraco + Mock API

We hebben een minimalistische maar realistische setup gemaakt:

  • Umbraco 15

  • NUnit testproject: voor het schrijven en draaien van tests

  • WireMock: om een externe API na te bootsen en wijzigingen te simuleren

  • ChatGPT: om AI-gegenereerde suggesties te geven op basis van tests en responses

Scenario: een externe API verandert zonder waarschuwing

Stel, je gebruikt een externe API die gebruikersdata levert. In de oorspronkelijke situatie krijg je:

{ "id": 1, "name": "John Doe" }

Je model is hierop afgestemd en je test controleert simpelweg of de Name-property beschikbaar is en wordt weergegeven:

Assert.That(user.Name, Is.Not.Null.And.Not.Empty);

Maar dan verandert de API naar:

{ "id": 1, "forename": "John", "surname": "Doe" }

De property name bestaat niet meer  en jouw code laat nu een lege waarde zien, zonder foutmelding. Je test faalt, maar waarom?

Slimme tests die fouten écht uitleggen

In dit project bouwen we tests die niet alleen zeggen "het is stuk", maar ook laten zien wat er precies veranderd is.

Bijvoorbeeld:


var doc = JsonDocument.Parse(json);
foreach (var prop in doc.RootElement.EnumerateObject())

{
    Console.WriteLine($"Response bevat: {prop.Name}");
}

Assert.That(doc.RootElement.TryGetProperty("name", out _) ||

            (doc.RootElement.TryGetProperty("forename", out _) &&

            doc.RootElement.TryGetProperty("surname", out _)),

            Is.True, "Naamvelden ontbreken in de API-response");
            

Zo zie je als developer direct of de structuur is gewijzigd en waar je je model moet aanpassen.

Dankzij deze R&D-opzet kun je:

  • Problemen in koppelingen vroegtijdig detecteren, nog vóórdat gebruikers of klanten iets merken

  • Bestaande tests inzetten als slimme vorm van API-monitoring: zodra de response verandert, krijg je direct feedback

  • AI inzetten om automatisch aanpassingen voor te stellen – bijvoorbeeld een pull request wanneer een veldnaam verandert

  • De buildstraat uitbreiden met automatische controles op API-wijzigingen, zodat foutgevoelige releases worden tegengehouden vóór ze live gaan

FotoMartijn

Benieuwd naar alle mogelijkheden bij het koppelen van jouw systeem?

Ik denk graag met je mee over hoe we voor een naadloze integratie en gestroomlijnde klantervaring zorgen.