gmock忽略“有趣”的函数调用

时间:2014-11-05 20:38:01

标签: c++ unit-testing mocking gmock

我想在单元测试中使用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);
}

1 个答案:

答案 0 :(得分:3)

您必须按如下方式重写测试用例

TEST(Lexer, N) {
  MockSymbolTable symbolTable;
  EXPECT_CALL(symbolTable, insert(::testing::_)).Times(1);

  symbolTable.insert(Entry("dsgft", 3));
}

必须首先触摸模拟对象之前设置所有调用期望。