Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

fixture (decorator)

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] Note

There is no way to get access to the members of these fixtures from within the test case or test suite.

Example: decorator fixture

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.


PrevUpHomeNext