...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
fixture(const boost::function<void()>& setup, const boost::function<void()>& teardown = {}); template <typename Fx> fixture<Fx>(); template <typename Fx, typename Arg> fixture<Fx>(const Arg& arg);
Decorator fixture
specifies
a pair of functions (like set_up
and tear_down
) to be called
before and after the corresponding test unit. At the suite level the set_up
function is called once -- before
the suite execution starts -- and tear_down
function is called once -- after the suite execution ends. It comes in
three forms.
First expects two functions for set-up and tear-down (the second one can be skipped).
The second expects a DefaultConstructible
class. Its default constructor will be used as set-up function and its
destructor as a tear-down function.
The third form requires a class with one-argument public constructor. Argument
arg
is forwarded to the
constructor.
For the second and third form, the framework detects if there is a setup
and/or teardown
function implemented in the class, with the same declaration as described
in the fixture
model. If those member function are declared, they will be called
right after construction and just before destruction respectively.
Note | |
---|---|
There is no way to get access to the members of these fixtures from within the test case or test suite. |
Code |
---|
#define BOOST_TEST_MODULE decorator_12 #include <boost/test/included/unit_test.hpp> namespace utf = boost::unit_test; struct Fx { std::string s; Fx(std::string s = "") : s(s) { BOOST_TEST_MESSAGE("set up " << s); } ~Fx() { BOOST_TEST_MESSAGE("tear down " << s); } }; void setup() { BOOST_TEST_MESSAGE("set up fun"); } void teardown() { BOOST_TEST_MESSAGE("tear down fun"); } BOOST_AUTO_TEST_SUITE(suite1, * utf::fixture<Fx>(std::string("FX")) * utf::fixture<Fx>(std::string("FX2"))) BOOST_AUTO_TEST_CASE(test1, * utf::fixture(&setup, &teardown)) { BOOST_TEST_MESSAGE("running test1"); BOOST_TEST(true); } BOOST_AUTO_TEST_CASE(test2) { BOOST_TEST_MESSAGE("running test2"); BOOST_TEST(true); } BOOST_AUTO_TEST_SUITE_END() |
Output |
---|
> decorator_12 --log_level=message Running 2 test cases... set up FX set up FX2 set up fun running test1 tear down fun running test2 tear down FX2 tear down FX *** No errors detected |
For other ways of using fixtures, see here.