我正在尝试使用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的陈述涉及编译。怎么解决? 感谢。
答案 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();
}