- 主题:用 gmock 怎么才能不使用 dependency injection?
我有一个类
#include "ReadDbObjects.h"
class ObjectManager
{
public:
ObjectManager()
{
ReadDbObjects db_reader;
mObjects = db_reader.ReadAll();
}
private:
vector<MyObject> mObjects;
}
现在想用 gmock 去 mock MyObject 和 ReadDbObjects, 但是这两个都是直接写死在代码中的, 没有 按照依赖注入方法构造. 现在想用 gmock 发现行不通, 无法让 ObjectManager 里面的依赖被 mock, 这种情况大家是如何处理的
另外 c++ 中用依赖注入的也不多吧?
--
FROM 36.170.35.*
MyObject看起来是数据类,那么一般来说更适合用fake而不是mock。即生成真实的MyObject类对象并填入数据。
而DbReader类则应该使用DI
你所谓的“代码里写死了”是哪里的代码?如果需要被测试的代码都写死了你还写测试干嘛?
【 在 fly2never 的大作中提到: 】
: 我有一个类
: #include "ReadDbObjects.h"
: class ObjectManager
: ...................
--
FROM 76.126.252.*
与其找这样的hack,不如改动ObjectManager
同时推荐一下这本书 Working Effectively with Legacy Code
--
FROM 221.220.131.*
工厂模式,ReadDbObject类上加个接口,加个兄弟类,ReadDbObject_Test
把初始化MyObject的问题,转化为初始化 IReadDbObject 的问题。
【 在 fly2never 的大作中提到: 】
: 我有一个类
: #include "ReadDbObjects.h"
: class ObjectManager
: ...................
--
FROM 113.140.161.*
你先把你的objectmanagr类改成constructor di
【 在 fly2never 的大作中提到: 】
: 我有一个类
: #include "ReadDbObjects.h"
: class ObjectManager
: ...................
--
FROM 98.228.215.*
这就是最痛苦的地方
【 在 mvtec (mvtec) 的大作中提到: 】
: 你先把你的objectmanagr类改成constructor di
--
FROM 36.170.35.*
可以理解。
所以我推荐你那本书,被洗脑一下,或者拿着它去布道
重要的基础软件没有个90%的覆盖率,很难当什么基石
【 在 fly2never 的大作中提到: 】
: 这就是最痛苦的地方
:
--
FROM 221.220.135.*
能理解
OOP里面dependency injection大概是
最重要
但同时也是
给很多程序员带来痛苦的原则。
【 在 fly2never 的大作中提到: 】
: 这就是最痛苦的地方
:
--
修改:mvtec FROM 98.228.215.*
FROM 98.228.215.*
习惯就好。
没事上个类就解决大部分了。
【 在 mvtec 的大作中提到: 】
: 能理解
: OOP里面dependency injection大概是
: 最重要
: ...................
--
FROM 76.126.252.*