当gmock看到一个它不期望的方法调用时,它会写一个这样的警告:
GMOCK WARNING:
Uninteresting mock function call - returning directly.
Function call: Constructor()
Stack trace:
当单元测试中的每个模拟对象都有一个名为“Constructor”的方法时,这不是很有帮助,因为找出哪个对象创建了这个消息并且缺少EXPECT_CALL并不总是那么容易。
有没有办法告诉gmock还要在这样的警告中写出类名或模拟对象的名称?
答案 0 :(得分:1)
我们已针对此问题实施了另一种解决方案。我们有自己的Eclipse插件,它从选定的头文件生成模拟对象文件。现在我们更改了插件以生成一个模拟名称,其中包含类的名称,例如:
MOCK_METHOD0(Timer_Constructor, void());
这会产生警告
Uninteresting mock function call - returning directly.
Function call: Timer_Constructor()
答案 1 :(得分:0)
这真的很不方便。
看一下the source of the uninteresting call function report,似乎无法修改此行为。对方法调用的可能反应由a fixed enum给出,因此扩展看起来不像是一个选项。您可以将Google Test事件监听器附加到测试套件中,但我认为达到这些内容的信息同样有限。
在我看来,如果这对我来说真的很重要,我会修改上面提到的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);
}
这并不像看起来那么疯狂;谷歌模拟是一个测试库,而不是生产,所以自定义(受控)修改并没有那么有害。实际上是Google does recommend use a custom compilation of Google Test for each different project。
或者您可以向他们发送补丁,看看他们是否喜欢它:)