Google测试:EXPECT_CALL无法在我的测试代码中编译

时间:2015-07-22 03:55:08

标签: c++ unit-testing mocking googletest

我正在尝试使用gmock进行第一次google测试,并准备好所有VS环境。简单使用gtest ASSERT_XX函数有效。但是当我尝试使用gmock时,我遇到了第一个编译问题。我想也许我的程序有一些问题,但gtest并没有告诉我如何修复它。

在下面的程序中,我得到了一个名为“FileIo”的类。它的“读取”功能将执行I / O,我希望在保持f()和g()不变的情况下模拟这个Read()函数。所以我使用NickMock建立FileIo的模拟对象,然后尝试使用EXPECT_CALL来伪造Read()函数。

class FileIo
{
public:
    int f(){ return 1; }
    int g(int i){ return i*i; }
    int Read(){
        FILE* pf = fopen("D:\\a.txt", "r+w");
        fclose(pf);
        return 3;
    }
};

class BBTest : public ::testing::Test
{
public:

};
TEST_F(BBTest, testcase_1)
{
    NiceMock<FileIo> mio;
    EXPECT_CALL(mio, Read()).WillRepeatedly(DoAll(Return(2)));
}

EXPECT_CALL的陈述涉及编译。怎么解决? 感谢。

1 个答案:

答案 0 :(得分:0)

以下是您发布内容的一个非常简单的示例。我不会解释它是最简单的形式。你可以从中学到很多例子。谷歌是你最好的朋友。搜索,阅读和学习。

class IFileIo
{
public:
    virtual int Read() = 0;
};

class FileIo : IFileIo
{
public:
    int Read() {
        FILE* pf = fopen("D:\\a.txt", "r+w");
        fclose(pf);
        return 3;
    }
};

class MyClass
{
public:
    void ReadFile()
    {
        _file->Read();
    }
    IFileIo* _file;
};

class NiceMock : public IFileIo
{
public:
    MOCK_METHOD0(Read, int());
};


class BBTest : public ::testing::Test
{
public:
    NiceMock _mio;
};

TEST_F(BBTest, testcase_1)
{
    EXPECT_CALL(_mio, Read()).WillOnce(Return(2));
    MyClass mc;
    mc._file = &_mio;
    mc.ReadFile();
}