如何模拟委托构造函数?

时间:2015-06-06 15:03:51

标签: c++ unit-testing gmock

我是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的函数进行单元测试。

0 个答案:

没有答案