我想在单元测试中使用gmock。我写了一个非常简单的例子,它失败了。 ISymbolTable是我想要模拟的界面。 MockSymbolTable是模拟对象。在测试中,我调用insert并检查是否调用了任何插入。
GMOCK警告:
无趣的模拟函数调用 - 直接返回。功能调用: insert(8字节对象< 24-7C 4C-04 03-00 00-00>)堆栈跟踪: LexerTests.cpp:25:失败实际函数调用计数不匹配 EXPECT_CALL(symbolTable,insert(:: testing :: _))...
class ISymbolTable {
public:
ISymbolTable() {}
virtual ~ISymbolTable() {};
virtual void insert(const Entry entry) = 0;
virtual int lookUp(const std::string text) = 0;
};
class MockSymbolTable : public ISymbolTable {
public:
MOCK_METHOD1(insert, void(const Entry entry));
MOCK_METHOD1(lookUp, int(const std::string text));
};
TEST(Lexer, N) {
MockSymbolTable symbolTable;
symbolTable.insert(Entry("dsgft", 3));
EXPECT_CALL(symbolTable, insert(::testing::_)).Times(1);
}
答案 0 :(得分:3)
您必须按如下方式重写测试用例
TEST(Lexer, N) {
MockSymbolTable symbolTable;
EXPECT_CALL(symbolTable, insert(::testing::_)).Times(1);
symbolTable.insert(Entry("dsgft", 3));
}
必须首先触摸模拟对象之前设置所有调用期望。