我是C ++单元测试的新手。我应该为我的代码编写单元测试,我也使用Google Mock。我已经完成了他们的乌龟示例。 但我仍然对如何模拟委托构造函数感到困惑。
我被要求使用一个高级的委托构造函数,他建议我应该使用委托的构造函数,以便单元测试调用它来避免创建对象并注入模拟。
目前主要代码看起来像这样
BaseClass::BaseClass(SomeClassA* obj_a)
: BaseClass(obj_a, MakeUnique<SomeClassB>()) {
}
BaseClass::BaseClass(SomeClassA* obj_a,std::unique_ptr<SomeClassB> obj_b)
: a_obj(CHECK_IFNULL(obj_a)),
b_obj(std::move(obj_b)) {
}
CHECK_IFNULL是一个用于检查空指针的宏。
现在在单元测试中,我应该模拟委托的构造函数,这样它就不会为SomeClassA和B创建对象,而是模仿它。
阅读龟教程后,我尝试了这个:
class BaseClass_Mock : public BaseClass {
BaseClass_Mock(
SomeClassA* obj_a,
std::unique_ptr<SomeClassB> obj_b)
: BaseClass(a_obj_mock, b_obj_mock) {
}
MOCK_METHOD2(Somefunction,
string(const string& name,
const string& type));
};
在尝试构建此代码后,我收到一条错误消息,指出a_obj_mock和b_obj_mock未定义。
现在,如果我将它们定义为 - 例如:
SomeClassA *a_obj_mock and
SomeClassB *b_obj_mock
然后我正在创建一个新对象吗?这将首先破坏使用委托构造函数的目的。那么如何模拟SomeClassA和SomeClassB的对象,以便我可以在不创建新对象的情况下对BaseClass的函数进行单元测试。