I am trying to start unit testing. I am looking at a few C++ frameworks and want to try Boost.Test. The documentation seems very thorough, and it’s a bit overwhelming, especially someone new to unit testing. So here’s a situation that I want:
Let’s say I have 2 classes, Foo and Bar. I want to write a suite of tests for Foo and a suite of tests for Bar, preferably in different files. I want to run the tests only if I run the program with a command line parameter. So my main() should look something like:
int main(int argc, const char* argv[])
{
if (argc == 1 && strcmp(argv[0], "-test") == 0)
run_all_tests();
else
return program_main(argc, argv);
}
I think test_foo.cpp should be something like:
#include "foo.hpp"
#define BOOST_TEST_MODULE Foo test
#include <boost/test/unit_test.hpp>
BOOST_AUTO_TEST_SUITE( Foo_Test )
BOOST_AUTO_TEST_CASE( Foo1 )
{
Foo f;
BOOST_CHECK( f.isValid() );
}
BOOST_AUTO_TEST_CASE( Foo2 )
{
Foo f;
BOOST_CHECK( f.baz() == 5 );
}
BOOST_AUTO_TEST_SUITE_END()
However, I don’t know (1) what the actual command to run the tests is, and (2) how to actually tell the library that I want to run EVERY test.
So, who has experience with Boost.Test? Can someone help in a detailed way? Thank you so much.
BOOST.Test is very flexible and you can probably do what you want. However since you say you are new to unit testing, you should probably follow the standard unit testing structure.
This is to have a separate test project for each project you are unit testing. Then include the sources and libraries you need to build the test project.
This is cleaner as there are no test logic in your main project that might get run accidentally and it is easy to run the tests as they have their own executable. This approach also works for testing libraries. If you follow this structure you will find that most of the BOOST.Test defaults work out of the box and you can just worry about writing you tests and code.