我是 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; }
此错误如下所示:
最佳答案
问题是从未在您的模拟对象 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/