许多关于单元测试的网站都说要提取接口和接口代码(这是有道理的),但这需要通过指针使用多态性。是否可以在没有指针的情况下完成此操作,因此我不必修改生产代码?我宁愿不使用指针和管理内存。
- 允许条件编译。
- 我专门为我的存根/模拟使用 gmock。
我研究过的一些事情是:
- 使用参考
- 涉及编写特殊的复制构造函数或使其不可复制
- 仍然需要用 new/delete 来管理内存
- 不确定这是否会导致不可预见的问题
- 通过代码生成创建指针包装类的集合。界面保持不变,但添加了一些测试方法。
- 似乎它会工作,但需要保养
- 我在下面的意思的例子
请注意 gmock 模拟对象是不可复制的,因此我不能构造函数注入它们。(https://groups.google.com/forum/#!topic/googlemock/GD73UXjQowE/discussion)
问题示例
class Example
{
public:
Example();
~Example();
private:
// I want to stub out _foo.
Dependency _foo;
};
指针包装类示例
#ifndef UNIT_TEST
Foo _foo;
#else
PtrWrapFoo _foo;
#endif
...
_foo.setImpl(StubFoo *aStubFoo);
...
void PtrWrapFoo::doSomething()
{
_impl->doSomething();
}