Unit testing Python Pytest test framework

Met unit testing in Python schrijf je code om andere code te testen. Dit is een algemeen concept in programmeren. Voor Python zijn er meerdere packages voor. Het meest gebruikte test framework is Pytest. Unit testing helpt je om de het juiste resultaat van je code te garanderen. Hiernaast voorkomt het dat code door latere aanpassingen niet goed meer werkt. Unit testing is vooral handig als je aan grote projecten werkt. Ook is het nuttig wanneer je samen met anderen aan code werkt.

In dit blog behandelen we de volgende onderwerpen:

  • De hoofstappen van unit testing in Python
  • Pytest en PyCharm voorbereiden
  • Stap 1: Aanmaken van een functie
  • Stap 2: Mogelijke testcases bedenken en implementeren
  • Stap 3: Verbeter de functie tot deze aan de eisen voldoet

De hoofdstappen van unit testing in Python

Met unit testing kun je de uitkomst van functies testen. Dit kun je doen voor meerdere scenario's. Grofweg doorloop je bij unit testing in Python altijd enkele hoofdstappen. Dit zijn de volgende stappen:

  • Stap 1: Maak een lege functie aan. Laat deze functie een vaste (foute) waarde teruggeven.
  • Stap 2: Denk na over mogelijke test cases waaraan de functie moet voldoen. Schrijf deze functies en valideer het resultaat.
  • Stap 3: Voeg logica toe aan de originele functie. Dit totdat de testfuncties succesvol uitgevoerd worden.
  • Stap 4: Herhaal eerdere stappen, totdat de originele functie aan alle eisen voldoet.

Deze stappen gaan we doorlopen met een voorbeeld. Dit doen we met package Pytest in IDE PyCharm. Pytest is in PyCharm te integreren waardoor tests gemakkelijk uitgevoerd kunnen worden. Dit kan ook met andere IDE's. Bijvoorbeeld ook met Microsoft Visual Code.

Om aan de slag te gaan hebben we eerst Pytest en PyCharm nodig.

Uiteraard moet je ook Python installeren als je dat nooit hebt gedaan.

Met vertrouwen waardevolle inzichten halen uit data? Schrijf je in voor een van onze trainingen.



Pytest en PyCharm voorbereiden

Zorg dat PyCharm geïnstalleerd is. Het is gratis te downloaden.

Installeer package Pytest. Dit doe je vanuit Windows in de command prompt. Hier gebruik je commando "pip install pytest".

Open PyCharm en maak een nieuwe projectmap aan. Navigeer naar File -> Settings -> Tools -> Python Integrated Tools -> Testing. Selecteer hier Pytest.

python pytest configureren tutorial

Hierdoor is Pytest ingesteld als standaard test framework.

Stap 1: Aanmaken van een functie

We gaan unit testing doen met Pytest. Hiervoor is een functie nodig om te kunnen testen. In deze tutorial maken we handmatig een functie om het aantal elementen in een list te tellen. Precies zoals de standaard functie 'len()'.

Maak hiervoor in de projectmap bestand 'main.py' aan. Definieer een functie 'length()'. Deze functie heeft 1 parameter: x. Met type hinging geven we aan dat x een list is. En ook dat de uitkomst van de functie het datatype integer is. We voegen nog geen logica toe in de functie. Als resultaat geven we een vaste waarde terug. Hier kiezen we 10.

unit testing python pytest uitleg

Stap 1 is nu voltooid.

Stap 2: Mogelijke testcases bedenken en implementeren

We maken een functie die het aantal elementen in een list telt. Hier gaan we testcases voor bedenken. Er zijn verschillende soorten test cases. Je hebt bijvoorbeeld:

  • Use case: een voorbeeld van normaal gebruik van de functie
  • Edge case: een voorbeeld van uitzonderlijk gebruik van de functie

Mogelijke testcases

We richten ons hier op use cases, normale test cases. Voor onze functie kunnen we bijvoorbeeld de volgende cases bedenken:

  1. Bepalen van de lengte van een lege list
  2. Bepalen van de lengte van een list met 1 waarde
  3. Bepalen van de lengte van een list met meerdere waarden

Testcases implementeren

We gaan deze functies schrijven. Hiervoor maken we eerst een nieuw bestand aan in de projectmap: 'test_main_pytest.py'. Dit voldoet aan de volgende conventies:

  • 'test_' laat zien dat dit bestand tests bevat
  • 'main' verwijst naar tests voor 'main.py'
  • '_pytest' verwijst naar het gebruik van Pytest

Vervolgens maken we functies voor de drie testcases aan:

test cases pytest python tutorial

Vanuit 'main.py' importeren we functie 'length()'.

Elk van de functienamen voldoet aan de volgende conventie:

  • 'test_' laat zien dat dit een testfunctie is
  • 'length' toont dat dit een test is voor functie 'length()'
  • Het laatste deel is bijvoorbeeld '_empty'. Dit geeft een omschrijving van de test.

Beoordelen met 'assert'

Elk van de functies bevat een assert vergelijking. De eerste test is 'test_length_empty()'. Hierin testen we met assert de uitkomst van een lege list: 'lenght([])'. Dit stellen we gelijk aan 0. Hiervoor gebruiken we twee = tekens. Assert beoordeelt de uitkomst. Indien onze functie voor een lege list 0 als resultaat geeft is de test geslaagd. Bij een andere uitkomst dan 0 is de test gefaald.

Pytest configuratie

Om de tests uit te voeren moet er configuratie toegepast worden. Klik op onderstaand blok.

Klik op 'Edit configurations…'. Maak vanuit 'Templates' een 'Python tests' configuratie aan voor bestand 'test_main_pytest.py'. Dit moet er vergelijkbaar uitzien als in onderstaande afbeelding.

Sluit dit, en zorg dat deze configuratie geselecteerd is. Klik rechtsboven op de groene play knop. De drie tests worden nu uitgevoerd. We zien het volgende resultaat:

Te zien is dat alle drie de tests gefaald zijn. Onze functie geeft nu standaard uitkomst 10. Dit is niet gelijk aan een van de uitkomsten van de test cases. Je ziet bijvoorbeeld 'assert 10 == 0'. Inderdaad, 10 is niet gelijk aan 0.

Stap 3: Verbeter de functie tot deze aan de eisen voldoet

We gaan nu logica aan de functie toevoegen. Vervolgens voeren we de tests uit. Afhankelijk van de uitkomst moet de functie verder aangepast worden. Dit herhalen we tot de functie aan alle eisen voldoet.

Toevoegen van logica

We openen bestand 'main.py' weer. Hier voegen we logica toe zodat het aantal elementen geteld kan worden. Dit totale aantal is de uitkomst van de functie.

Tests opnieuw uitvoeren

Nu de logica is toegevoegd kunnen we de tests opnieuw uitvoeren. Dit doe je door wederom op de groene play knop te klikken.

Nu zijn alle tests succesvol uitgevoerd. Hierdoor voldoet de functie 'length()' aan alle eisen.

Om te onthouden

Unit testing gebruik je om met code andere code te testen. Dit helpt het garanderen van juiste uitkomsten uit functies. Dit door fouten automatisch te herkennen. Pytest is een veelgebruikt package voor unit testing in Python. IDE's als PyCharm integreren Pytest. Hierdoor kun je tests gemakkelijk uitvoeren. Daarnaast zie je het resultaat visueel. Unit testing dwingt je na te denken over normaal en uitzonderlijk gebruik van je functies. Dit helpt je robuuste code te schrijven.

Wil je meer leren over unit testing of andere toepassingen van Python? Schrijf je dan in voor onze Python cursus voor data science, onze machine learning training, of voor onze data science opleiding. We verzorgen ook maatwerk trainingen in-company. Je kunt altijd even contact opnemen als je een vraag hebt.

Download één van onze opleidingsbrochures voor meer informatie

by: