Unit testing 指向基类的gmock指针没有成员gmock_

Unit testing 指向基类的gmock指针没有成员gmock_,unit-testing,c++11,googlemock,Unit Testing,C++11,Googlemock,如果标题不清楚,很抱歉 我有一个虚拟基类: class FileSystemInterface { public: virtual ~FileSystemInterface() {}; virtual void save(std::string file_content) = 0; }; 我的模拟类源于以下内容: class MockFile : public FileSystemInterface { public: MOCK_METHOD1(save, void(

如果标题不清楚,很抱歉

我有一个虚拟基类:

class FileSystemInterface {
public:
    virtual ~FileSystemInterface() {};

    virtual void save(std::string file_content) = 0;
};
我的模拟类源于以下内容:

class MockFile : public FileSystemInterface
{
public:
    MOCK_METHOD1(save, void(std::string));
};
现在我有了一个正在测试的方法,该方法使用一个指向
文件系统接口的唯一指针:

void my_method(std::unique_ptr<FileSystemInterface>& interface)
然后,
EXPECT\u CALL
就可以了,但是现在
my\u方法
抱怨:
类型为“std::unique\u ptr&”(非const-qualified)的引用不能用类型为“std::unique\u ptr”的值初始化。

我怎样才能避开这个冲突并创建我的测试?多谢各位

更新

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

void my_method(std::unique_ptr<FileSystemInterface> interface);
void my_方法(std::unique_ptr接口);
然后像这样运行我的测试:

std::unique_ptr<MockFile> mockFile(new MockFile);
EXPECT_CALL(*mockFile, save(_));
my_method(std::move(mockFile));
std::unique_ptr<MockFile> mockFile(new MockFile);
EXPECT_CALL(*mockFile, save(_));
my_method(mockFile);
std::unique_ptr mockFile(新mockFile);
期望调用(*mockFile,save());
my_方法(std::move(mockFile));

必须将模拟存储为模拟文件,如下所示:

std::unique_ptr<MockFile> mockFile(new MockFile);
EXPECT_CALL(*mockFile, save(_));
my_method(std::move(mockFile));
std::unique_ptr<MockFile> mockFile(new MockFile);
EXPECT_CALL(*mockFile, save(_));
my_method(mockFile);
std::unique_ptr mockFile(新mockFile);
期望调用(*mockFile,save());
我的方法(mockFile);

但您需要更改方法的签名。引用unique_ptr是很奇怪的,因为拥有该对象的人并不干净。如果my_方法拥有mockFile,则通过将指针移到该方法(按值传递)来转移所有权。如果我的\u方法不拥有该文件,则将其作为普通指针传递。

我的猜测是使用
std::unique\u ptr mockFile(新mockFile)。但是,我再也没有在C++中嘲笑的经验了……@ Alexey Guseynov的代码中的“不正确的事情”在他的第一行代码示例中使用:使用<代码> STD::UNQuijyPtR…<代码>,而不是<代码> STD::UnQuyGyPTR…< /代码>