【发布时间】:2013-10-03 09:24:30
【问题描述】:
我正在使用 Boost 库从智能指针中受益:shared_ptr。
我怀疑在我的单元测试中,我做错了作业。
我的实现有什么缺点,特别是有 //suspected 注释的指令?
我是否需要释放 shared_ptr 指针(我猜不可能按照我在单元测试中分配的方式去做)?
有什么建议吗?非常感谢!
在 Class2 声明中:
static boost::shared_ptr<Class1> getInstanceOfClass1();
在 Class2 定义中:
boost::shared_ptr<Class1> Class2::getInstanceOfClass1()
{
boost::shared_ptr<Class1> inst1 = boost::make_shared<Class1>();
//.... some instructions on inst1
return inst1 ;
}
在使用 Boost.Test 的单元测试中:
BOOST_AUTO_TEST_CASE( test_some_label_here )
{
string input;
//instructions...
// mocking the input
//...
Class1 a = *(Class2::getInstanceOfClass1()); //suspected
int code = a.useInputAndReturnCode(input);
// having CODE_X as a macro
BOOST_CHECK_EQUAL(code, CODE_X);
}
【问题讨论】:
-
在测试中,为什么不简单的使用返回的
shared_ptr呢?现在您参与了复制构造函数,这可能不是您想要使用该测试进行测试的内容。 -
另外,
Class1和Class2之间的关系是什么? -
不,没必要
-
我不确定我是否理解。在单元测试中,您使用复制。如果你的类支持复制,为什么要动态分配呢? (作为一般规则,如果一个类支持复制,你不应该对它使用智能指针,也不应该动态分配它,因为如果你这样做,你最终会得到动态对象和本地对象的可怕混合。选择一个或每个班级的另一个。)
标签: c++ unit-testing boost shared-ptr smart-pointers