【发布时间】:2019-12-04 10:21:46
【问题描述】:
我已经构建了一个文件管理器(基本上是读/写)类,我正在尝试进行单元测试。文件格式基本上属于第三方,我在构造函数中有第三方函数调用。我通过包装方法调用所有第三方调用 我的问题是:在开始对类中的任何方法进行单元测试之前,我试图实例化如下所示的构造函数:
Filemanager::Filemanager{
if(wrapperfoo()){
file->open() //for writing
}
initialise();
}
现在我有一个模拟类 MockManager 来模拟 Filemanager。当我试图实例化 MockManager 时, 我需要模拟 wrapperoo 以返回 true。但是,由于管理器本身尚未实例化,因此 EXPECT_CALL 失败。由于 EXPECT_CALL 必须放在 new MockManager() 之前
MockManager *mgr;
EXPECT_CALL(*mgr, wrapperfoo()).Return(true) // Crashes here.. Obviously!!
mgr = new MockManager();
我该如何处理这种情况?
【问题讨论】:
-
将
file->open移动到initialise内,然后在构造函数外调用initialise -
为什么你的mock中有逻辑? Mock 不应该自己做任何事情。它只通知您它已被使用并返回您请求返回的值。仅此而已。
标签: c++ unit-testing googletest googlemock