我是Google Mock的新手,基于我对文档和在线资源的理解,我找不到解决问题的方法:
我有以下课程:
class A
{
public:
A() { }
int fun1()
{
//Some code
B b;
x = b.fun2();
//Some other code
}
};
class B
{
public:
B() { }
int fun2()
{
//Some code
y = C::fun3();
//Some code
}
};
class C
{
public:
static int fun3()
{
//Read a file and provide success if a certain pattern is found
}
};
现在我正在尝试为A :: fun1()编写Google测试。但是由于代码的结构(所有调用都是通过对象而我没有使用我可以初始化模拟等的基类,所以我无法成功地模拟它。
有人可以帮助我了解Google Mock目前的形式是否嘲笑它?请注意,我不允许更改原始源代码。
答案 0 :(得分:2)
只要可以使用静态接口(即模板参数)配置被测试类,就可以执行此操作。有关详细信息,请参阅此处:Mocking Nonvirtual Methods。
另一种选择可能是在您测试的类中引入包装器接口,可以像往常一样进行模拟:Alternative to Mocking Concrete Classes。
如果您无法更改任何代码,那么恕我直言。
<强>更新强>:
在class B
内实例化A::fun1()
很长时间,无论如何都很难模仿B
。它应该作为参数传递,因此您有机会控制测试方法中的实例化。
可能是一个可行的解决方案,您可能会欺骗构建环境进行测试,并提供class B
的声明和定义,提供模拟。