【发布时间】:2015-07-22 03:55:08
【问题描述】:
我正在使用 gmock 尝试我的第一个 google 测试,准备好所有 VS 环境。 gtest ASSERT_XX 函数的简单用法有效。但是在尝试使用 gmock 时,我遇到了第一个编译问题。我想也许我的程序有问题,但 gtest 没有告诉我如何解决它。
在下面的程序中,我得到了一个名为“FileIo”的类。它的“读取”函数将执行 I/O,我希望模拟这个 Read() 函数,同时保持 f() 和 g() 不变。于是我用 NickMock 建立了一个 FileIo 的 mock 对象,然后尝试用 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 语句编译失败。如何解决? 谢谢。
【问题讨论】:
-
查看您收到的实际编译器错误会很有帮助。
-
你需要为FileIo定义一个Mock类。您不能像上面所做的那样将其包装在
NiceMock中。见code.google.com/p/googlemock/wiki/ForDummies#Getting_Started
标签: c++ unit-testing mocking googletest