Test Driven Development with C++

I switched from CppUnit to boost::test some years ago and I'm much happier with it.

  • Documentation for CppUnit is nonexistent. Good luck trying to find out what command line options it supports without reading the code. Apparently it makes more sense to people already familiar with JUnit though. boost::test has excellent documentation.
  • boost::test's auto test registration facility makes adding unit test cases insanely easy. With CppUnit you have to write quite a lot of boilerplate for each test case (a line in the header and a line it the .cpp to register it, on top of the test method itself).
  • boost::test lets you select test subsets by regexp from the commandline. We had to hack CppUnit sources to get it to do that when we originally picked it up.
  • The one thing I do miss from CppUnit is its "Protectors". You can define your own and have them wrap each test and check whatever (e.g we had a problem with some code messing with the x87 floating point rounding mode; checking the state was unchanged in a Protector quickly caught all offenders). boost::test has some similar thing called a test_observer but last time I tried you couldn't actually fail a test from one.

If you are just looking for C++ unit test frameworks, see this question and its answers: C++ unit testing framework


I can recommend Google Mock, which has become part of Google Test bundled. We switched from UnitTest++ to Google Test/Google Mock a couple of years ago and have never looked back.

Google Mock can be used even if you don't want to use the mocking facilities. Its matchers are very useful.

Tags:

C++

Tdd

Cppunit