我正在为一堂课写一个GMOCK测试用例:
class A{ .. void Text() .. };
现在,A类的成员方法之一嵌入了一个B类型对象,并且还引用了静态成员方法:
void A::Text()
{
B bobj;
B::SMethod();
bobj->BMethod();
......
}
在这种情况下,我如何模拟B及其方法?
答案 0 :(得分:1)
您可以测试从它派生的类,而不是测试A
,我们称之为TestableA
。在A
制作Text()
virtual
并覆盖使用模拟B
。另外,请查看this question以获取有关如何使用静态方法模拟类的更多想法。
然而,最好的解决方案是通过引入一个接口(例如A
)并将其注入B
来打破InterfaceB
和Text()
之间现有的紧密依赖关系。 SMethod()
将成为接口的(非静态)成员。在制作中,您会在ActualB
调用ActualB::SMethod()
static
的地方注入B::SMethod()
。在测试中,您将使用MockB::SMethod()
,根据测试需求进行定制。