gpt4 book ai didi

c++ - 实际函数调用计数与 EXPECT_CALL 不匹配

转载 作者:行者123 更新时间:2023-11-28 04:05:04 26 4
gpt4 key购买 nike

我是 Gmock 的新手。我尝试了一个例子,但它是错误的。我也引用了该组的一些帖子,但对我没有帮助。

class MATH
{
public:
virtual ~MATH(){}
virtual int Tong(int a, int b)
{
return a + b;
}
};

class MockMATH : public MATH
{
public:
MOCK_METHOD2(Tong, int(int,int));
};

class TestMATH
{
MATH m ;
public:
int TestTong(int a, int b)
{
cout<<"TONG"<<endl;
if(m.Tong(a,b))
{
cout<<"Successful"<<endl;
return a+b;
}
else
{
cout<<"Failed"<<endl;
return -1;
}

}

};

TEST(MyMathTest, Tong_by_true)
{
MockMATH mM;
TestMATH math;
EXPECT_CALL(mM,Tong(_,_));
//.WillOnce(Return(9));

int retValue = math.TestTong(4,5);
std::cout<<retValue<<std::endl;
EXPECT_EQ(retValue,9);
}

int main(int argc, char** argv)
{
::testing::InitGoogleTest(&argc, argv);
int ret = RUN_ALL_TESTS();
return ret;
}

此错误如下所示: enter image description here

最佳答案

问题是从未在您的模拟对象 mM 上调用方法 Tong()。它在 TestMath 类的成员对象 m 上调用。这行不通,m 不是模拟对象,gmock 对此一无所知,也无法跟踪对其调用的方法。

我看到的最简单的解决方案是:

class MATH { public: virtual ~MATH(){} virtual int Tong(int a, int b) { return a + b; } };
class MockMATH : public MATH
{
public:
MOCK_METHOD2(Tong, int(int,int));
};

class TestMATH
{
MockMATH m ;
public:
int TestTong(int a, int b)
{
std::cout<<"TONG"<<std::endl;
if(m.Tong(a,b))
{
std::cout<<"Successful"<<std::endl;
return a+b;
}
else
{
std::cout<<"Failed"<<std::endl;
return -1;
}

}

MockMATH& getMMath() { return m; }

};

TEST(MyMathTest, Tong_by_true)
{
TestMATH math;
EXPECT_CALL(math.getMMath(),Tong(_,_))
.WillOnce(Return(9));

int retValue = math.TestTong(4,5);
std::cout<<retValue<<std::endl;
EXPECT_EQ(retValue,9);
}

哪个通过了测试。

关于c++ - 实际函数调用计数与 EXPECT_CALL 不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58870270/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com