首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >指向基类的gmock指针没有成员gmock_。

指向基类的gmock指针没有成员gmock_。
EN

Stack Overflow用户
提问于 2017-05-17 15:21:04
回答 1查看 9.4K关注 0票数 4

如果标题不清楚很抱歉。

我有一个虚拟基类:

代码语言:javascript
复制
class FileSystemInterface {
public:
    virtual ~FileSystemInterface() {};

    virtual void save(std::string file_content) = 0;
};

我的模拟类是从这个派生出来的:

代码语言:javascript
复制
class MockFile : public FileSystemInterface
{
public:
    MOCK_METHOD1(save, void(std::string));
};

现在我有了一个测试的方法,它使用一个指向FileSystemInterface的唯一指针

代码语言:javascript
复制
void my_method(std::unique_ptr<FileSystemInterface>& interface)

我的测试代码如下:

代码语言:javascript
复制
std::unique_ptr<FileSystemInterface> mockFile(new MockFile);
EXPECT_CALL(*mockFile, save(_));
my_method(mockFile);

问题是EXPECT_CALL给了我一个错误class "FileSystemInterface" has no member "gmock_save"

这大概是因为模拟是指向基类的指针,但是如果我按以下方式更改测试:

代码语言:javascript
复制
std::unique_ptr<MockFile> mockFile(new MockFile);
EXPECT_CALL(*mockFile, save(_));
my_method(mockFile);

那么EXPECT_CALL很好,但现在my_method抱怨道:a reference of type "std::unique_ptr<FileSystemInterface, std::default_delete<FileSystemInterface>> &" (not const-qualified) cannot be initialized with a value of type "std::unique_ptr<MockFile, std::default_delete<MockFile>>"

我怎样才能避开这场冲突,创造我的测试呢?谢谢。

更新

正如Alexey Guseynov回答中指出的,我的方法确实拥有指针的所有权,所以要做的事情是将我的方法更改为

代码语言:javascript
复制
void my_method(std::unique_ptr<FileSystemInterface> interface);

像这样做我的测试:

代码语言:javascript
复制
std::unique_ptr<MockFile> mockFile(new MockFile);
EXPECT_CALL(*mockFile, save(_));
my_method(std::move(mockFile));
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-17 15:27:23

您必须将模拟存储为MockFile,如下所示:

代码语言:javascript
复制
std::unique_ptr<MockFile> mockFile(new MockFile);  // not so obvious change
EXPECT_CALL(*mockFile, save(_));
my_method(mockFile);

但是您需要更改方法的签名。引用unique_ptr是很奇怪的,因为不清楚谁拥有该对象。如果my_method拥有mockFile,那么通过将指针移动到方法(通过值传递)来传递所有权。如果my_method不拥有该文件,则将其作为普通指针传递。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44028922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档