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

GMOCK - mock an object and its inside mock method

我正在为 class:

编写 GMOCK 测试用例
class A{ .. void Text() .. };

现在classA的一个成员方法中嵌入了一个classB类型的对象,同时也引用了静态成员方法:

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

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

您可以测试从它派生的 class,而不是测试 A,我们称它为 TestableA。在 A 中使 Text() virtual 并在重写中使用 B 的模拟。此外,请查看 this question 了解更多有关如何使用静态方法模拟 classes 的想法。

尽管如此,最好的解决方案是通过引入接口(例如 InterfaceB)并将其注入 Text() 来打破 AB 之间现有的紧密依赖关系. SMethod() 将成为接口的(非静态)成员。在生产中,您将在 ActualB::SMethod() 调用 static B::SMethod() 的地方注入 ActualB。在测试中,您将使用 MockB::SMethod(),根据测试需求量身定制。