C++ 实际函数调用计数不为';不符合你的要求

C++ 实际函数调用计数不为';不符合你的要求,c++,googlemock,C++,Googlemock,我是格莫克的新手。我尝试了一个例子,但它是错误的。我也提到了一些关于这个小组的帖子,但这对我没有帮助 课堂数学 { 公众: 虚拟~MATH(){} 虚拟内钳(内钳a、内钳b) { 返回a+b; } }; 数学类:公共数学 { 公众: 模拟方法2(汤,int(int,int)); }; 课堂测试数学 { 数学m; 公众: 内部测试钳(内部a、内部b) { cout问题是方法Tong()从未在模拟对象mM上调用过。它是在对象m上调用的,对象m是TestMath类的成员。这不起作用,m不是模拟对象,g

我是格莫克的新手。我尝试了一个例子,但它是错误的。我也提到了一些关于这个小组的帖子,但这对我没有帮助

课堂数学
{
公众:
虚拟~MATH(){}
虚拟内钳(内钳a、内钳b)
{
返回a+b;
}
};
数学类:公共数学
{
公众:
模拟方法2(汤,int(int,int));
};
课堂测试数学
{
数学m;
公众:
内部测试钳(内部a、内部b)
{
cout问题是方法Tong()从未在模拟对象mM上调用过。它是在对象m上调用的,对象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);
}
class MATH{public:virtual~MATH(){}virtual int Tong(inta,intb){返回a+b;};
数学类:公共数学
{
公众:
模拟方法2(汤,int(int,int));
};
课堂测试数学
{
Mockm;
公众:
内部测试钳(内部a、内部b)
{

std::cout
TestMATH
不涉及
mM
。你为什么期望
mM.Tong
被调用?我理解这个问题。感谢回复:D:D@S.M.感谢您的回复,但我还有一个问题。如何使用MOCK_METHODn模拟返回void的方法。我尝试了MOCK_METHOD0(MethodName,void(Args));但它不起作用。我们如何测试void函数中的局部变量。或者一个函数打印出了一些东西但没有返回,我们需要检查它打印出了什么。在一个新的主题中问这个问题,如果不睡觉,我会回答。谢谢你的回答,它现在起作用了。但是你能告诉我更多关于EXPECT\u-CA的细节吗LL语句有效?我们需要传递什么参数以及Return()如何影响m.Tong(a,b)?这个问题相当模糊,我建议您阅读文档,也许几次。文档中的描述非常清楚。如果您没有找到某个特定问题的答案,如果我知道的话,我很乐意告诉您:-)
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);
}