TDD in C
TDD in C
Dit is een stuk complexer en wordt ook net iets minder gebruikt dan in de higher level languages zoals Python en Java, maar nog altijd zeer handig. Je moet echter de juiste instellingen voor je compiler en dergelijke instellen. Om die reden laten we dit als zelfstudie voor de student die hierin geïnteresseerd is en refereren naar een video die gebruik maakt van CMake en Gtests om TDD in C mogelijk te maken.
Waarschuwing
Hoewel dat de tutorial gemaakt is rond C++ files, maakt dit niet uit omdat je hier ook gewoon C functies kan gebruiken. Het is echter wel waar dat de testen zelf WEL in een .cpp-file (C++) geschreven moeten zijn! In de oude cursus Besturingssystemen & C kan je ook nog eens de nodige info terugvinden indien gewenst.
Hieronder toch al een klein voorbeeld waar je mee van start kan gaan:
Unit testen in C met CMake
We maken een klein C‑project en schrijven twee eenvoudige unit testen. We maken een klein calculatorvoorbeeld dat vergelijkbaar is met wat je eerder in Java hebt gezien.
Installeren van de benodigde tools (normaal gezien al ok)
Projectstructuur
We maken gebruik van de volgende projectstructuur:
Hier staan de volgende directories voor:
build/de build directoryinclude/bevat header filessrc/bevat de implementatietests/bevat unit testen
Implementatie van het calculator voorbeeld
calculator.h
calculator.c
Een eenvoudige test schrijven
Net zoals in Java willen we controleren of onze functie correct werkt. C heeft geen ingebouwd testframework zoals JUnit, maar we kunnen de assert macro gebruiken zoals in Python. Wanneer een assert faalt, stopt het programma met een foutmelding.
test_calculator.c
Het buildproces configureren met CMake
CMakeLists.txt
Builden en testen
We builden het project zoals we gewend zijn met cd build && cmake .., daarna builden we met make en runnen de testen met make test. Zo simpel kan het zijn
Een voorbeeld output van de testen geeft: (Als alle testen slagen)
Of volgende output als er testen falen:
Merk op dat met deze simpele manier alles faalt zodra 1 test faalt, aangezien de hele main functie faalt met de asser. Voor meer granulariteit kan je dus best de Google Test Suite gebruikem.