【问题标题】:gmock ignore "interesting" function callgmock 忽略“有趣”的函数调用
【发布时间】:2015-01-02 04:51:58
【问题描述】:

我想在我的单元测试中使用 gmock。我写了一个非常简单的例子,但它失败了。 ISymbolTable 是我想模拟的接口。 MockSymbolTable 是模拟对象。在测试中我调用 insert 并检查是否调用了任何插入。

GMOCK 警告:

无趣的模拟函数调用 - 直接返回。函数调用: 插入(8 字节对象 )堆栈跟踪: 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);
}

【问题讨论】:

  • 不相关,您应该通过 const 引用 (const &) 而不是 const 值传递参数

标签: c++ unit-testing mocking gmock


【解决方案1】:

你必须重写测试用例如下

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

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

所有的调用预期必须在第一次接触模拟对象之前设置。

【讨论】:

  • 你修改了我的问题标题。我认为测试应该通过,这是我的问题。我不想隐藏这个警告。
  • @EmilJasiński 很抱歉。你的问题对我来说有点不清楚。我发现了你的问题是什么。编辑了我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-26
  • 2013-02-24
  • 1970-01-01
  • 1970-01-01
  • 2014-11-01
  • 1970-01-01
  • 2011-06-11
相关资源
最近更新 更多