【发布时间】:2013-04-01 20:18:28
【问题描述】:
是否可以只初始化一次夹具并在同一测试套件中的多个测试用例中使用它?在下面的例子中,fixture 被多次构造和销毁:
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()
但我希望夹具在测试套件开始时只构造一次,并在其中的所有测试用例之间共享。可能吗?退出测试套件后将调用析构函数。
我正在使用 Boost Test Framework,但使用 UnitTest++ 等其他框架没有问题。
【问题讨论】:
-
fixture 的目的是为所有测试用例准备环境。为什么要在第一个案例之前准备好,而不是为其他案例准备?
-
@harper 假设我正在打开一个用于所有测试用例的套接字。我不想为每个测试用例打开和关闭套接字。我只想打开一次,在多个测试用例中使用它,然后在最后一个测试用例完成后关闭它。
-
@Meysam 特别是对于套接字,您应该尝试隔离测试。当 test n 关闭(意外)套接字时,您可以看到 test n+1 失败。标记响应显示了一种具有全局固定装置的方式。你应该检查你是否会使用它,或者你是否应该保持隔离的想法。
-
这个功能或多或少直接在 boost.test 中实现,见this link。 UTF 负责夹具的设置/拆卸,但您无法访问夹具类,就像您拥有的 sn-p 一样。您必须提供例如。访问实例的静态方法。
标签: c++ unit-testing boost fixtures boost-test