考虑以下情况
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个单元测试用例
- 当打印X时,Init的返回值为true
- 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
派生,或者使用高性能DI,使Foo
成为模板方法或整个类B
,这取决于模板。