我是Gmock的新手。我尝试一个例子,但这是错误的。我还介绍了该小组的一些帖子,但对我来说没有帮助。
<body> <h1>Flights Finder</h1> <script type="text/javascript"> fetch("https://skyscanner-skyscanner-flight-search-v1.p.rapidapi.com/apiservices/pricing/v1.0", { 'method': 'POST', 'headers': { 'x-rapidapi-host': 'skyscanner-skyscanner-flight-search-v1.p.rapidapi.com', 'x-rapidapi-key': 'API_KEY', 'content-type': 'application/x-www-form-urlencoded' }, 'body': { 'inboundDate': '2019-11-24', 'cabinClass': 'business', 'children': '0', 'infants': '0', 'country': 'US', 'currency': 'USD', 'locale': 'en-US', 'originPlace': 'SFO-sky', 'destinationPlace': 'LHR-sky', 'outboundDate': '2019-11-16', 'adults': '1' } }) .then(response => { console.log(response); }) .catch(err => { console.log(err); }); </script> </body>
,此错误如下所示:
答案 0 :(得分:1)
问题在于,永远不会在模拟对象mM上调用Tong()方法。在对象m(TestMath类的成员)上调用它。那行不通,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);
}
通过测试。