社区首页 >问答首页 >警告中缺少模拟对象名称。

警告中缺少模拟对象名称。
EN

Stack Overflow用户
提问于 2014-10-09 00:30:40
回答 2查看 287关注 0票数 2

当gmock看到它不希望看到的方法调用时,它会写一个如下所示的警告:

代码语言:javascript
代码运行次数:0
复制
GMOCK WARNING:
Uninteresting mock function call - returning directly.
    Function call: Constructor()
Stack trace:

当单元测试中的每个模拟对象都有一个名为"Constructor“的方法时,这并不是很有帮助,因为找出创建这个消息的对象并缺少一个EXPECT_CALL并不总是那么容易。

在这样的警告中,有一种方法可以告诉gmock也写类名或模拟对象的名称吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-11 12:40:42

这真的很不方便。

看一看无趣的调用函数报告的来源,似乎不可能修改这种行为。固定的enum给出了对方法调用的可能反应,所以这里的扩展看起来不像是一个选项。您可以将Google侦听器附加到测试套件中,但我认为到达测试套件的信息同样有限。

在我看来,如果这对我来说真的很重要的话,我会修改Google源代码中提到的行,并将对象地址(它是最近的东西和标识符)与MockObject()放在一起。类似于:

代码语言:javascript
代码运行次数:0
复制
  // Writes a message that the call is uninteresting (i.e. neither
  // explicitly expected nor explicitly unexpected) to the given
  // ostream.
  virtual void UntypedDescribeUninterestingCall(
      const void* untyped_args,
      ::std::ostream* os) const
          GTEST_LOCK_EXCLUDED_(g_gmock_mutex) {
    const ArgumentTuple& args =
        *static_cast<const ArgumentTuple*>(untyped_args);
    *os << "Uninteresting mock function call - ";
    DescribeDefaultActionTo(args, os);
    *os << "      Function call: " << Name();
    *os << "Mock object address: " << MockObject();
    UniversalPrint(args, os);
  }

这并不像看上去那么疯狂;Google是一个测试库,而不是生产,所以定制(受控)修改在那里并没有那么有害。而且实际上是Google确实推荐为每个不同的项目使用Google的自定义编译

或者你可以把补丁发给他们,看看他们是否喜欢:)

票数 0
EN

Stack Overflow用户

发布于 2014-11-12 23:52:38

我们已经对这个问题采取了另一种解决办法。我们有自己的Eclipse插件,它从选定的头文件生成模拟对象文件。现在,我们将插件更改为生成一个包含类名的模拟名称,例如:

代码语言:javascript
代码运行次数:0
复制
  MOCK_METHOD0(Timer_Constructor, void());

这将导致警告。

代码语言:javascript
代码运行次数:0
复制
Uninteresting mock function call - returning directly.
Function call: Timer_Constructor()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26273770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文