2014-10-09 70 views
2

当gmock看到一个方法调用它不希望丢失,写警告这样的:模仿对象名称是在警告

GMOCK WARNING: 
Uninteresting mock function call - returning directly. 
    Function call: Constructor() 
Stack trace: 

这并不是非常有益的,当在单元的每个模拟对象test有一个名为“Constructor”的方法,因为找出哪个对象创建了这条消息并且缺少一个EXPECT_CALL并不总是那么容易。

有没有办法告诉gmock也写这样的警告类名称或模拟对象的名称?

回答

0

这真的很不方便。

看看the source of the uninteresting call function report,似乎不可能修改此行为。对方法调用的可能反应由a fixed enum给出,所以扩展在这里看起来不是一个选项。您可以将Google测试事件侦听器附加到测试套件中,但我认为达到这些信息的信息同样有限。在我看来,如果这对我来说真的很重要,我会修改Google Mock源代码中提到的几行,并且与方法名一起,我会把对象地址(这是最近的东西和标识符)与MockObject()。例如:

// 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); 
    } 

这并不像看起来那么疯狂;谷歌Mock是一个测试库,而不是生产,所以定制(受控)修改在那里并不是那么有害。而实际上Google does recommend use a custom compilation of Google Test for each different project

或者你可以向他们发送补丁,看他们是否喜欢它:)

1

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

MOCK_METHOD0(Timer_Constructor, void()); 

这将导致警告

Uninteresting mock function call - returning directly. 
Function call: Timer_Constructor()