- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 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/
A 类正在测试中,我希望 EXPECT_CALL 立即返回,并为模拟的 asyncfunc() 方法调用值为 200(右值引用)的 lamda 函数。请阅读符合代码的注释 #include "gtes
我的 mock 定义如下: template class ParseTreeMock : public ParseTreeInterface { public: MOCK_ME
有没有办法在函数的局部对象上使用 EXPECT_CALL? 例如: template std::string doSomethingWithTheCar() { T car; retu
我知道 EXPECT_CALL 应该用于模拟类及其对象/方法。但是有没有可能使用它来期望调用本地方法? void Sample::Init() { // some codes here...
我正在使用 gtest & gmock 并希望对使用集合调用的函数设置期望值。我想确保这个集合包含多个元素。 像这样: EXPECT_CALL(*mView, SetHighlightedCells(
我有一个类通过调用 subscribe(callbackfunction) 来“订阅”来自组件的信号。我现在正尝试通过保存回调并稍后向其发送数据以测试该组件的其他部分来使用 gtest/gmock 测
我有一个类,其中包含几个相互依赖的方法。让我们说 foo()、bar() 和 baz()。 当我测试 bar() 时我需要模拟 foo() 的行为,当我测试 baz() 时我需要模拟 bar() 的行
我有一个用于串行接口(interface)的简单模拟类: class MockSerialPort : public drivers::SerialPort { public: MockS
我有一些期望,比如 EXPECT_CALL (...) EXPECT_CALL(t1, foo()).Times(1); 我想创建相反的。 我期望某个函数不会被执行 . 我应该使用什么方法? 类似 E
我有两个模拟。一次运行只应调用其中一个,我想在不知道给定先决条件的情况下使用期望来确定 execute() 函数是否成功。 如何实现? Mock1 successMock; Mock2 failMoc
#include "gtest\gtest.h" using namespace testing; class MyGTest : public Test { public: void f()
我有一个类,其构造函数调用一个成员函数,该成员函数又调用其他成员函数。我想使用 GMock 创建一个模拟类,并验证在构造模拟类对象时,这些成员函数在构造过程中被调用了一次。但我观察到以下困境: 一方面
我是 Gmock 的新手。我尝试了一个例子,但它是错误的。我也引用了该组的一些帖子,但对我没有帮助。 class MATH { public: virtual ~MATH(){} virt
测试用例应断言调用了资源的方法tagcache(),以确保更新资源的标签缓存。我知道调用了该方法,但测试失败,因为: Expected: to be called at least once Actu
我在 C 中有以下代码想使用谷歌测试框架进行测试: a.h void getValue(int age, int * value); a.c #include void getValue(int a
我刚刚开始使用 GoogleTest 和 GoogleMock。阅读"for dummies" documentation该示例测试依赖于 Turtle 的 Painter 类: 真实对象-Turtl
Google Mock documentation说: Important note: Google Mock requires expectations to be set before the m
我必须遵循模拟函数 DoSomething(const char* par0, const char* par2) DoSomething2(std::string); 我将 DoSomething
struct obj { int a; string str; string str2; bool operator==(const obj& o) const { if
我对 Google Mock 还是很陌生,所以边学边学。我刚刚添加了一些单元测试,但遇到了一个问题,我无法让 ON_CALL() 正确地 stub 从方法内部调用的方法。 下面的代码概述了我所拥有的;
我是一名优秀的程序员,十分优秀!