0
我写一个GMOCK测试用例的一类:GMOCK - 嘲笑对象及其内部模拟方法
class A{ .. void Text() .. };
现在类A的成员方法中的一个具有B类的对象嵌入到它和也指静态成员方法:
void A::Text()
{
B bobj;
B::SMethod();
bobj->BMethod();
......
}
在这种情况下,我该如何模拟B及其方法?
我写一个GMOCK测试用例的一类:GMOCK - 嘲笑对象及其内部模拟方法
class A{ .. void Text() .. };
现在类A的成员方法中的一个具有B类的对象嵌入到它和也指静态成员方法:
void A::Text()
{
B bobj;
B::SMethod();
bobj->BMethod();
......
}
在这种情况下,我该如何模拟B及其方法?
除了测试A
,您可以测试从它派生的类,我们称之为TestableA
。在A
使Text()
virtual
和重写使用模拟的B
。另外,请看this question了解更多关于如何用静态方法模拟类的想法。
然而,最好的办法是通过引入一个接口(例如InterfaceB
),并将其注入到Text()
打破A
和B
之间存在紧密相关性。 SMethod()
将成为界面的(非静态)成员。在生产中,您将注入ActualB
,其中ActualB::SMethod()
称为static
B::SMethod()
。在测试中,您会使用MockB::SMethod()
,根据测试需求量身定制。