使用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;
/* ???*/
}

我想通过使用mock来模拟Init 的返回值来编写2个单元测试用例

  1. 当打印X时,Init的返回值为true
  2. 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(,然后使MockAA派生,或者使用高性能DI,使Foo成为模板方法或整个类B,这取决于模板。

最新更新