gmock 如何指定不应该调用其他模拟方法?

Posted

技术标签:

【中文标题】gmock 如何指定不应该调用其他模拟方法?【英文标题】:gmock how to specify that no other mocking methods should ever be called? 【发布时间】:2019-01-09 15:15:16 【问题描述】:

我有一个模拟类,目前模拟了三个方法:

MOCK_METHOD0(method1, std::string());
MOCK_METHOD1(method2, bool(std::string str));
MOCK_METHOD1(method3, bool(std::string str));
...

在一个测试用例中,我希望方法 1 只在 mockClass 上调用一次,并且不应该通过指定 Times(0) 来调用其他模拟方法。


    InSequence sequence;
    EXPECT_CALL(*mockClass, method1(_)).WillOnce(doSomething());
    EXPECT_CALL(*mockClass, method2(_)).Times(0); 
    EXPECT_CALL(*mockClass, method3(_)).Times(0); 

但是,如果模拟类上的模拟方法数量非常多,我将不得不在这些模拟方法上写很多 .Times(0) ,我不希望它们被调用。

我认为,如果我省略所有这些 .Times(0),google test 将向控制台打印无趣的模拟函数调用,但这些是警告而不是错误,并且很难捕捉到。有没有一种简单的方法可以做到这一点?

【问题讨论】:

【参考方案1】:

您可以使用StrictMock - 请参阅link 以获取有关不同模拟变体的更多文档。

【讨论】:

以上是关于gmock 如何指定不应该调用其他模拟方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 gmock 模拟修改 C++ 类中的私有变量的成员函数?

GoogleTest中gMock的使用

如何使用 GMock 模拟 OpenCV 相机,或者如何使用带有 GTest 的相机测试方法?

仅在 spock 中模拟基于调用次数的方法返回

模拟 - 测试是否在不指定参数的情况下调用方法

Grails:我如何模拟被测类的其他方法,这些方法可能在测试期间被内部调用