Unit Testing in C
Coming from Javascript and Ruby development, I found it quite difficult to get unit tests running in C. This is a short tutorial on how to set up testing.
Installing Boost Test
Boost is a massive collection of C++ libraries. I haven’t had the time to look over the collection, but Boost Test Library provides the simple unit testing support I needed.
- OSX : brew install boost
- Linux (Debian flavours) : sudo apt-get install libboost-all-dev
- Windows : Here’s an install tutorial. Good luck.
Creating a Test Module
#define BOOST_TEST_MODULE MyTestModule
#include <boost/test/included/unit_test.h>
BOOST_AUTO_TEST_CASE(myTestCase) {
BOOST_CHECK(true);
}
That’s a barebones test module that will compile and run.
- MyTestModule is the name of our module
- BOOST_AUTO_TEST_CASE declares a test case
- myTestCase is the name of the test case.
- BOOST_CHECK accepts one parameter and asserts it is true
Simple Example
Take the following C++ header file useful.h.
#ifndef TEST_H
#define TEST_H
int usefulFunction (int val) {
return val;
}
#endif
The function above simply returns any integer you give it. We can test it with the following file useful.spec.c:
#define BOOST_TEST_MODULE UsefulModule
#include <boost/test/included/unit_test.h>
#include "useful.h"
BOOST_AUTO_TEST_CASE(usefulFunctionTest) {
BOOST_CHECK(usefulFunction(2) == 2);
BOOST_CHECK(usefulFunction(3) == 3);
}
To run the tests:
- Compile using g++ -o useful.spec.o useful.spec.c
- Run with ./useful.spec.o