Test runners

Test runners are responsible for executing the tests in one ore more test suites. A test application must include at least one test runner in order to execute any tests.

The test_runner interface

class test_runner
test_runner()
test_runner()
test_runner(test_reporter &r)

The default constructor will use the text_reporter class when reporting test results. This can be changed by supplying another reporter as the test_reporter argument at construction time.

~test_runner()
use_reporter()
void use_reporter(test_reporter &r)

Set the test reporter to use after construction.

stage<T>()
template<typename t_suite>
void stage();

Register new suite

run_all()
int run_all();

Run all tests in registered test suites. Returns the number of failed tests.

run_suite<T>()
template<typename t_suite>
int run_suite();

Run all tests in a suite. Returns the number of failed tests.

run_test<T>()
template<typename t_suite>
int run_test(void (t_suite::*test)());

Run a single test in a single suite. Returns the number of failed tests.

Suite registration

In order to execute a set of test suites each suite has to be registered with the test runner. This is done with the test_runner::stage<T>() method. E.g. assume that my_suite_1, my_suite_2, my_suite_3 are test suites. Then:

test_runner tester;

tester.stage<my_suite_1>();
tester.stage<my_suite_2>();
tester.stage<my_suite_3>();

tester.run_all();

will create a test runner, register the suites and execute all tests in each one of them.

Running single suites

It is possible to execute all tests in a suite directly, then there is no need to stage the suite first.

test_runner tester;

tester.run_suite<my_suite>();

Running single tests

It is possible to execute a single test in a suite directly. This is done by invoking the test_runner::run_test<T>() method in the test runner class with a pointer to the test to run.

test_runner tester;

tester.run_test(&my_suite::test_method);

Here my_suite is a test suite and test_method is the name of the test method to execute.