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.

Related articles

Blogs

28 Sep 2023

Blogs

right-arrow.png
Chat GPT en testdata creeren

ChatGPTTestdata

28 Sep 2023

Chat GPT en testdata creeren

right-arrow.png
Handson opleiding bij het starten van je carierre

Testautomation

20 Sep 2023

Handson opleiding bij het starten van je carierre

right-arrow.png

Are you ready to learn everything regarding testautomation

The guided path and the learnportal will make you a t-shaped tester. Guided by advanced material and hosted by a senior tester this portal will help you become professional

Contact us
image-11.WebP