【发布时间】:2020-05-18 03:19:41
【问题描述】:
我有定义为的接口 在 .h 文件中
namespace diagnostic{
class class1interface{
virtual int readpowerstate()const =0;
virtual int readparameters() = 0;
}
class class1 : public class1interface{
int readpowerstate()const;
int readparameters();}};
在.cc文件中我有这个功能
int diagnostic::readparameters(){
if(diagnostic::readpowerstate ==1)
{ //Dothis}
else
{return 0}}
我必须执行 else 部分,因为默认情况下,当我运行程序时会调用 if。所以我尝试如下使用gmock。
class Mock_class : public diagnostic::class1interface{
public:
Mock_class(){}
MOCK_METHOD0(readparameters,int());
MOCK_CONST_METHOD0(readpowerstate,int());};
和我写的 gmock 测试如下 // 测试读取参数失败
TEST_F(TestBase, readParam_failure){
Mock_class mock_class;
class1 *class_dummmy = new class1();
EXPECT_CALL(mock_class, readpowerstate()).WillOnce(Return(0));
class_dummy->readparameters;
EXPECT_EQ(0, class_dummy->readparameters());}
当我执行这个程序时,我得到了错误
错误:实际函数调用计数不匹配
EXPECT_CALL(mock_class, readpowerstate())...
预期:至少被调用一次
实际:从未调用 - 不满意且活跃
由于我是 gmock 的新手,对此有什么解决方案。
【问题讨论】:
-
抱歉,这是一个拼写错误。 (它是 class1::readpowerstate == 1)。
-
模拟测试不是这样工作的。您实际上并没有在代码中使用模拟类。您确实创建了一个模拟对象,但您测试了实际的原始类,而不将模拟对象注入系统。也就是说,您应该将
Mock_class注入系统,而不是EXPECT_EQ(0, class_dummy->readparameters());},并使用这个注入的对象验证其他类。 -
您能否告诉我的代码格式如何将 Mock_class 注入系统,因为我对 gmock 很陌生。
-
有没有与
class1interface通信的类? -
我们在另一个类方法中调用 class1interface 作为 int class2::readdata(){ std::unique_ptr<:class1interface> classint = std::make_unique<:class1>() ; int value = classint -> readparameters();返回值;对于在其他类函数中调用的所有类,我们遵循相同的方法。
标签: c++ googletest googlemock