【发布时间】:2016-11-03 17:54:41
【问题描述】:
我有一些基于 googlemock 框架的单元测试的遗留代码。在尝试使用一些新场景扩展单元测试时,我遇到了以下问题:
class D
{
public:
void pubMethod1();
int pubMethod2();
// There are pretty much non-virtual methods, both public and private
...
protected:
uint method3();
void method4();
...
// Some class members are here
};
class SUT
{
public:
...
protected:
D _dep;
};
应测试 SUT 类(被测软件),其实现在文件 sut.cpp 中定义。 SUT 依赖于 D 类,其实现在文件d.cpp 中。为了减少链接器依赖性,我不想将d.cpp 添加到测试中,因此当我链接测试时,D 的成员会出现许多“未定义符号”错误。为了消除错误并提供可预测的行为,我将为我的测试中的 D 方法创建假实现。但是,在 D 的方法是虚拟的之前,我仍然无法将它与 googlemock 的所有功能一起使用。
我喜欢使用 googlemock 框架中的 WillOnce、AtLeast、WillRepeatedly、Invoke 等函数的想法,因为它使单元测试的创建更容易。问题是我不喜欢改变 D 的接口,把它的方法变成虚拟的方法。是否可以使用 googlemock 函数与我将为 D 的方法创建的假实现?
注意:我已经考虑过使用模板化 SUT 类的解决方案,但是我想知道是否存在其他解决方案。
【问题讨论】:
标签: c++ unit-testing googletest googlemock