Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ googlemock测试中基类中的虚函数_C++_Unit Testing_Gmock - Fatal编程技术网

C++ googlemock测试中基类中的虚函数

C++ googlemock测试中基类中的虚函数,c++,unit-testing,gmock,C++,Unit Testing,Gmock,我是google mock的新手,从google官方回购中找到了一些基本参考资料 我有一个非常简单的类资源,我想模拟这个类。在浏览GoogleMock备忘单时,我意识到派生mock类的基类中的所有函数都是虚拟的 问题: 为了创建一个模拟类,是否有必要让基类中的所有函数都是虚拟的,或者这样做是一种好的做法?下面是Resource类的外观 template <typename T> class Resource { public: Resource() : client(nullp

我是google mock的新手,从google官方回购中找到了一些基本参考资料

我有一个非常简单的类
资源
,我想模拟这个类。在浏览GoogleMock备忘单时,我意识到派生mock类的基类中的所有函数都是虚拟的

问题: 为了创建一个模拟类,是否有必要让基类中的所有函数都是虚拟的,或者这样做是一种好的做法?下面是
Resource
类的外观

template <typename T>
class Resource {
 public:
  Resource() : client(nullptr) {}
  bool isAvailable() const { return client == nullptr; }
  bool isClient(const GID<T>& gid_) const { return client == nullptr ? false : client->isEqual(gid_); }
  bool registerClient(const GID<T>& gid_) { return (isAvailable()) ? setClient(gid_) : false; }
  bool unregisterClient(const GID<T>& gid_) { return isClient(gid_) ? resetClient() : false; }

 private:
  bool setClient(const GID<T>& gid_) {
    client.reset(new Client<T>(gid_));
    return true;
  }
  bool resetClient() {
    client.reset();
    return true;
  }

  std::unique_ptr<Client<T>> client;
};
模板
类资源{
公众:
Resource():客户端(nullptr){}
bool isAvailable()常量{return client==nullptr;}
bool-isClient(const-GID&GID_)const{return client==nullptr?false:client->isEqual(GID_)}
bool registerClient(const GID&GID_){return(isAvailable())?setClient(GID_):false;}
bool unregistereclient(const GID&GID_){return isClient(GID_)→resetClient():false;}
私人:
bool setClient(const GID和GID_2;){
客户端重置(新客户端(gid));
返回true;
}
bool resetClient(){
client.reset();
返回true;
}
std::唯一的ptr客户端;
};

GoogleMock重写方法以提供不同的实现,以后可以使用
EXPECT\u CALL
跟踪和修改这些方法。因此,是的,任何要模拟的方法都应该是
virtual
,任何接受
Resource
的类都应该通过引用或指针来接受它以使用多态性。