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

标签 c++ googlemock

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

相关文章:

C++ 单元测试和 stub 第 3 方 C 库

c++ - 如何 zlib 压缩 QByteArray?

c++ - 接受左值引用或右值引用

c++ - BITMAPINFO 结构的 bmiColors 字段

c++ - Google Mock 函数改变参数值

segmentation-fault - EXPECT_CALL 上的 gmock 段错误

c++ - 尝试模拟纯虚拟类

c++ - 使用预处理器和函数指针原型(prototype)创建函数

c++ - 我可以得到一个 istream 来放置而不是分配吗?

c++ - C++ 客户端可以调用用 golang 编写的 golang GRPC 服务器 stub 吗?