为什么内部构造函数没有什么特别之处呢?

时间:2013-08-23 14:16:08

标签: c#

这是this closed question的分拆,我有一个答案,但在我回应之前它已经关闭了。以下是该问题的调整版本:

为什么一个类有一个只设置属性的内部构造函数?

public class SomeClass
{
    public SomeClass() : this(new SomeOtherClass()) { }
    internal SomeClass(SomeOtherClass c) { _someField = c; }

    private SomeOtherClass _someField;

    protected void SomeMethod() {
        var foo = _someField.Bar();
    }
}

这有什么好处,你为什么不这样做:

public class SomeClass
{
    public SomeClass() { _someField = new SomeOtherClass(); }

    private SomeOtherClass _someField;

    protected void SomeMethod() {
        var foo = _someField.Bar();
    }
}

1 个答案:

答案 0 :(得分:6)

拥有这样的protectedinternal构造函数非常常见,因为这是使用Dependency Injection进行测试。

当您正常调用代码时,它只会创建SomeOtherClass的实例,但是当您运行单元测试时,您可以让它通过模拟它的SomeOtherClass模拟版本(假设{{1}是您的数据层接口,SomeOtherClass是您的业务逻辑层类,模拟类伪造对DB的调用并返回结果,就像它连接到DB一样)

SomeClass

这使您可以在不进行昂贵操作的情况下进行单元测试,例如设置为已知状态并在测试计算机上运行完整数据库服务器,以测试不针对数据层类的测试。