我刚学会使用Google Mock。当我测试一个类,我可以将模拟对象作为指针或引用(依赖注入)传递时,它工作正常。当我有一个不使用DI的课程时,我还没有找到解决方案。
我们目前有很多不使用DI和接口的代码,例如:
#include "ReadDbObjects.h"
class ObjectManager
{
public:
ObjectManager()
{
ReadDbObjects db_reader;
mObjects = db_reader.ReadAll();
}
private:
vector<MyObject> mObjects;
}
(这极其简化,但应解释问题)
我们目前通过为单元测试创建一个名为ReadDbObjects.cpp的文件(其中包含带有类声明的原始ReadObjects.h)来测试这样的东西,该文件静态链接到单元测试。在这个文件中,我们模拟了ReadAll-Method,因此它返回了测试所需的对象。这个文件很难维护,它需要另一个在ReadObjects.cpp和单元测试中都知道的文件,因此测试和模拟的ReadObjects类之间的值可以在两个方向上传递。