Property based testing voor een pensioenplanner

24 okt. 2022 | by Ralph Van Der Horst

Property-Based Testing voor een Pensioenplanner

Introductie tot Property-Based Testing met een Voorbeeld van een Pensioenplanner 🏦💰

Heb je je ooit afgevraagd hoe pensioenfondsen ervoor zorgen dat de pensioengegevens altijd correct en veilig zijn? Een van de manieren waarop ze dit doen, is met “Property-Based Testing”.

Stel je voor dat we een systeem testen waar mensen hun pensioengegevens kunnen inzien en wijzigen. We willen zekerstellen dat de gegevens altijd consistent en correct zijn!

Hier is hoe Property-Based Testing werkt in dit voorbeeld:

  • Definiëren van Eigenschappen: We beginnen met het definiëren van enkele regels (eigenschappen) die altijd waar moeten zijn. Voor onze pensioenplanner zijn de eigenschappen:

    • Toegangscontrole: Alleen huidige deelnemers moeten toegang hebben tot de pensioenplanner.
    • Automatische Berichtgeving: Zodra de gegevens van een deelnemer zijn ingevoerd, moet er een bericht worden verzonden.
    • Data-Integriteit: De ingevoerde gegevens moeten correct en consistent zijn.
  • Genereren van Testgevallen: In plaats van specifieke scenario’s te schrijven, laten we de computer willekeurige testgevallen voor ons genereren.

  • Controleren van Eigenschappen: Voor elk testgeval controleren we of onze eigenschappen geldig zijn.

  • Rapporteren van Fouten: Als we een scenario vinden waarin de eigenschappen niet gelden, faalt de test en weten we dat er een probleem is in ons systeem!

Door deze methode te gebruiken, kunnen we onze pensioenplanner met een breed scala aan scenario’s testen en ervoor zorgen dat het correct werkt, zelfs als dingen niet gaan zoals gepland!

const fc = require('fast-check');

// Voorbeeld data
const deelnemers = [
    { id: 1, naam: 'Jan', isActief: true },
    { id: 2, naam: 'Piet', isActief: true },
    { id: 3, naam: 'Klaas', isActief: false }
];

// Functie om een bericht te sturen naar de deelnemer
function stuurBericht(deelnemerId) {
    const deelnemer = deelnemers.find(d => d.id === deelnemerId);
    if (!deelnemer || !deelnemer.isActief) {
        throw new Error('Deelnemer niet gevonden of niet actief');
    }
    return `Bericht verzonden naar ${deelnemer.naam}`;
}


// Property-Based Testing
fc.assert(
    fc.property(fc.integer(1, deelnemers.length), (deelnemerId) => {
        const deelnemer = deelnemers.find(d => d.id === deelnemerId);
        if (deelnemer && deelnemer.isActief) {
            const resultaat = stuurBericht(deelnemerId);
            if (!resultaat.includes(deelnemer.naam)) {
                throw new Error('Naam komt niet voor in het bericht');
            }
        } else {
            try {
                stuurBericht(deelnemerId);
                throw new Error('Bericht had niet verzonden mogen worden');
            } catch (e) {
                // Dit is het verwachte gedrag
            }
        }
    })
);

console.log('Alle tests geslaagd!');

In dit voorbeeld hebben we een lijst van deelnemers en een functie stuurBericht die een bericht stuurt naar een actieve deelnemer op basis van zijn/haar ID. We gebruiken Property-Based Testing om te controleren of de functie correct werkt voor alle mogelijke deelnemerIDs, waarbij we verschillende scenario’s testen afhankelijk van of de deelnemer actief is of niet.

by Ralph Van Der Horst

arrow right
back to blog

share this article