带有C#初始化mock的构造函数



无法为创建模拟

public MetricsProvider(IConfig configData, IMetricsLogger log)
{
    config = configData;
    logger = log;
    oracleDAL = new OracleDataAccess(config, logger);
    MetricsData = new DataCollector();
}

我所做的步骤:为IConfigIMetricsLogger创建一个mock对象。我试图调用MetricsProvider(config,logger),但它引用了Oracle连接,无法获得连接或模拟连接对象。

这实际上是一个完美的例子,说明了为什么依赖注入是有益的。

您想要的是测试MetricsProvider。但是因为MetricsProvider在内部创建了OracleDataAccessDataCollector的实例,所以如果不测试这些类,就无法测试MetricsProvider

但是这些课程依赖于什么呢?它们是否需要额外的依赖项,比如app.config设置,如果不查看这些类的源代码,就无法查看这些设置?(如果这些类依赖于其他依赖性更强的类,该怎么办?)

如果测试失败,很难判断缺陷是在MetricsProvider中,还是隐藏在其他类中的未知依赖项。

修复它的方法是将一个接口传递给由OracleDataAccess实现的构造函数。如果该类尚未实现接口,则可以创建一个与现有类相对应的新接口。或者,如果只需要一个方法,可以定义一个更具体的接口,并将OracleDataAccess封装在实现该接口的类中。

然后MetricsProvider将依赖于注入到构造函数中的接口,您将能够对其进行模拟。由于该mock将使您能够准确地确定IOracleDataAccess的行为,现在您将能够单独测试MetricsProvider

最新更新