unit-testing 资产注入

示例

属性注入允许在创建类依赖关系后对其进行更新。如果要简化对象创建,但是仍然允许测试双精度测试覆盖依赖项,这可能很有用。

考虑一个需要在错误情况下写入日志文件的类。该类知道如何构造一个default Logger,但是允许通过属性注入覆盖它。但是,值得注意的ILogger是,ConcreteLogger在这种给定的示例中,以这种方式使用属性注入将使该类与该类的确切实现紧密结合。可能的解决方法是返回所需ILogger实现的工厂。

public class RecordProcessor
{
    public RecordProcessor()
    {
        Logger = new ConcreteLogger();
    }

    public ILogger Logger { get; set; }

    public void DoSomeProcessing()
    {
        // ...
        _logger.Log("Complete");
    }
}

在大多数情况下,构造器注入优于属性注入,因为它可以在构造对象后立即提供关于对象状态的更好保证。