实际的函数调用计数与EXPECT_CALL不匹配

时间:2019-11-15 04:17:10

标签: c++ gmock

我是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>

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

1 个答案:

答案 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);
}

通过测试。