我需要初始化一些变量,分别是“全球”一BOOST_AUTO_TEST_SUITE 所以它们的构造函数将被调用内部时,该套件启动和析构函数将在最后的权利称为相应的BOOST_AUTO_TEST_CASE完成升压测试初始化为每套房(不区分)
有人知道我该怎么做吗?看起来像全球固定装置不是一个解决方案...
我需要初始化一些变量,分别是“全球”一BOOST_AUTO_TEST_SUITE 所以它们的构造函数将被调用内部时,该套件启动和析构函数将在最后的权利称为相应的BOOST_AUTO_TEST_CASE完成升压测试初始化为每套房(不区分)
有人知道我该怎么做吗?看起来像全球固定装置不是一个解决方案...
以供将来参考:
This has been added to the library,为1.36,我相信。
我不认为这是可能的升压测试库。全球固定装置实际上是全球性的,即它们在每个测试运行中被实例化,而不是每个套件。
除此之外,我认为这样的设置会违反测试隔离原则。你能解释为什么你需要套件范围内的“全局”变量吗?
我不是很肯定,如果接受的答案是正确的,因为如果我从升压网站使用的测试代码(http://www.boost.org/doc/libs/1_57_0/libs/test/doc/html/utf/user-guide/fixture/test-suite-shared.html)
#define BOOST_TEST_MODULE example
#include <boost/test/included/unit_test.hpp>
struct F {
F() : i(0) { BOOST_TEST_MESSAGE("setup fixture"); }
~F() { BOOST_TEST_MESSAGE("teardown fixture"); }
int i;
};
//____________________________________________________________________________//
BOOST_FIXTURE_TEST_SUITE(s, F)
BOOST_AUTO_TEST_CASE(test_case1)
{
BOOST_CHECK(i == 1);
}
//____________________________________________________________________________//
BOOST_AUTO_TEST_CASE(test_case2)
{
BOOST_CHECK_EQUAL(i, 0);
}
//____________________________________________________________________________//
BOOST_AUTO_TEST_SUITE_END()
预期的调用序列履行答案应该是
setup fixture
test_case1
test_case2
teardown fixture
,但实际上它是
setup fixture
test_case1
teardown fixture
setup fixture
test_case2
teardown fixture
我不千牛如果这是一个错误,我会解释BOOST_FIXTURE_TEST_SUITE
文档以完成第一个行为。我也可以使用BOOST_FIXTURE_TEST_CASE
完成秒行为。
只需更换
BOOST_FIXTURE_TEST_SUITE(s, F)
BOOST_AUTO_TEST_CASE(test_case1)
[...]
BOOST_AUTO_TEST_SUITE_END()
与
BOOST_TEST_GLOBAL_FIXTURE(F);
BOOST_AUTO_TEST_CASE(test_case1)
[...]
然后,它会像你期望的那样。
- sym39
起初我以为我会需要它开到我的数据库的连接,并尽可能快地将其关闭。但经过一段时间的思考之后,我开始相信我不需要太快地关闭它......或者只是对每个案例开放关闭,而不是整个套件 – Alek86 2011-12-14 22:25:11
为什么不在每个测试用例之后重新初始化/清除?您可以使用套件夹具来执行此操作,并将您的init/cleardown代码放入构造函数/析构函数中,因为每个测试用例都将从套件夹具派生,您可以确保每个测试用例都从已知状态开始。 – mark 2011-12-16 20:14:00