GMOCK - 模拟一个对象及其内部模拟方法

时间:2017-09-01 11:48:17

标签: c++ gmock

我正在为一堂课写一个GMOCK测试用例:

class A{ .. void Text() .. };

现在,A类的成员方法之一嵌入了一个B类型对象,并且还引用了静态成员方法:

void A::Text()
{
B bobj;
B::SMethod();
bobj->BMethod();
......
}

在这种情况下,我如何模拟B及其方法?

1 个答案:

答案 0 :(得分:1)

您可以测试从它派生的类,而不是测试A,我们称之为TestableA。在A制作Text() virtual并覆盖使用模拟B。另外,请查看this question以获取有关如何使用静态方法模拟类的更多想法。

然而,最好的解决方案是通过引入一个接口(例如A)并将其注入B来打破InterfaceBText()之间现有的紧密依赖关系。 SMethod()将成为接口的(非静态)成员。在制作中,您会在ActualB调用ActualB::SMethod() static的地方注入B::SMethod()。在测试中,您将使用MockB::SMethod(),根据测试需求进行定制。