如何解决使用gmock编写单元测试
考虑以下情况
class A
{
public:
bool Init()
{
bool ret = false;
/* code */
return ret;
}
};
A a_obj;
class B
{
public:
bool Foo()
{
if(a_obj.Init())
{
cout<< "X" ;
}
else
{
cout<< "Y" ;
}
}
}
class MockA
{
public:
METHOD0(Init,bool());
};
TEST(InitTest,CallFoo)
{
MockA mockobj;
B b_obj;
/* ???*/
}
我想通过模拟来模拟Init的返回值来编写2个单元测试用例
- Init的返回值是真实的,当打印X时
- Init的返回值是false,它显示Y。
我不想将A对象保留为B的成员,而是希望将其保留为全局变量。 我该如何编写这些测试?
解决方法
A
不必是B
的成员-可以将其作为参数传递给 Foo()
,其中a_obj
为默认值:
// A definition as before
A a_obj;
class B
{
public:
bool Foo(A& a = a_obj)
{
if(a.Init())
{
cout<< "X" ;
}
else
{
cout<< "Y" ;
}
}
}
但是您必须使Init
为虚拟方法(并且很可能将虚拟dtor添加到A),然后让MockA
从A
派生或使用hi-perf DI并根据模板将Foo
用作模板方法或整个类B
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。