2011-12-14 36 views
3

我需要初始化一些变量,分别是“全球”一BOOST_AUTO_TEST_SUITE 所以它们的构造函数将被调用内部时,该套件启动和析构函数将在最后的权利称为相应的BOOST_AUTO_TEST_CASE完成升压测试初始化​​为每套房(不区分)

有人知道我该怎么做吗?看起来像全球固定装置不是一个解决方案...

回答

1

我不认为这是可能的升压测试库。全球固定装置实际上是全球性的,即它们在每个测试运行中被实例化,而不是每个套件。

除此之外,我认为这样的设置会违反测试隔离原则。你能解释为什么你需要套件范围内的“全局”变量吗?

+0

起初我以为我会需要它开到我的数据库的连接,并尽可能快地将其关闭。但经过一段时间的思考之后,我开始相信我不需要太快地关闭它......或者只是对每个案例开放关闭,而不是整个套件 – Alek86 2011-12-14 22:25:11

+0

为什么不在每个测试用例之后重新初始化/清除?您可以使用套件夹具来执行此操作,并将您的init/cleardown代码放入构造函数/析构函数中,因为每个测试用例都将从套件夹具派生,您可以确保每个测试用例都从已知状态开始。 – mark 2011-12-16 20:14:00

2

我不是很肯定,如果接受的答案是正确的,因为如果我从升压网站使用的测试代码(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完成秒行为。