Now that you've written a test, you'd probably like to run it. There are a couple of layers here: you'll typically want to group your tests into suites, and your suites into a registry.
First, suites. Say you've written a bunch of tests for your
spiffy new Stack
class: SinglePush
,
PushPop
, EmptyPop
, etc. Group these
into a namespace, called perhaps StackTest
. Then,
within your namespace, create a class that should inherit from
UnitTest::Suite
. Its constructor should call the
add()
function repeatedly, passing each test as a
template argument. Here's an example:
namespace StackTest { class SinglePush { /* ... */ }; class PushPop { /* ... */ }; class EmptyPop { /* ... */ }; class All : public UnitTest::Suite { public: All() { add<SinglePush>(); add<PushPop>(); add<EmptyPop>(); } }; }
Next, you should expose StackTest::All
to the
outside world as follows:
UnitTest::TestPtr stackTests() { return UnitTest::createSuite<StackTest::All>(); }
That's the first part of grouping your tests together. The
other part is to write a program that runs your stack tests, as
well as the tests for your other classes. To do this, write a
main()
function. This should create a
UnitTest::Registry
, add each of the suites to it,
and then call run()
on the registry. Here's an
example:
int main(int argc, char **argv) { UnitTest::Registry tests; tests.add(stackTests(), "stack"); tests.add(queueTests(), "queue"); return tests.run(argc, argv); }
If you compile and run this, it will run all of your tests. It will print out a dot for each passing test; for each failing test, it will print out the failing assertion. It will print out the total number of passes and failures; it will return 0 if all the tests passed, or 1 if at least one failed.
If you only want to run tests from some of the suites, you can
specify the suites that you want to run as an argument to your
program. In the above situation, for example, if you invoke the
program with the argument stack
, it will only run
the stack tests.
The class UnitTest::Suite
is defined in the header
file unittest/UnitTest.hpp
; the class
UnitTest::Registry
is defined in the header file
unittest/Registry.hpp
.
The text on this page may be copied and distributed, in modified or unmodified form, by anybody for any purpose.