无法为
创建模拟public MetricsProvider(IConfig configData, IMetricsLogger log)
{
config = configData;
logger = log;
oracleDAL = new OracleDataAccess(config, logger);
MetricsData = new DataCollector();
}
我做的步骤:
为IConfig
和IMetricsLogger
创建一个模拟对象。
我试图调用MetricsProvider
(config,logger),但是它引用了 Oracle 连接,无法获得连接或模拟连接对象。
答案 0 :(得分:0)
这实际上是依赖注入有益的一个完美例子。
你想要的是测试MetricsProvider
。但是因为MetricsProvider
在内部创建了OracleDataAccess
和DataCollector
的实例,所以如果不对这些类进行测试,则无法测试MetricsProvider
。
但这些课程依赖于什么?它们是否需要其他依赖项,例如app.config设置,如果不查看这些类的源代码,则无法看到它们? (如果这些类依赖于其他具有更多依赖关系的类,那该怎么办?)
如果您的测试失败,将很难判断缺陷是否在MetricsProvider
中,或者是否隐藏在其他类中的某些未知依赖项。
修复它的方法是将接口传递给由OracleDataAccess
实现的构造函数。如果该类尚未实现接口,则可以创建与现有类对应的新接口。或者,如果您只需要一个方法,则可以定义一个更具体的接口,并在实现该接口的类中包装OracleDataAccess
。
然后MetricsProvider
将依赖于注入构造函数的接口,您将能够模拟它。由于该模拟功能可让您确切地确定IOracleDataAccess
的行为方式,因此您现在可以单独测试MetricsProvider
。