gpt4 book ai didi

c# - 为什么要有一个不做任何特殊事情的内部构造函数?

转载 作者:太空狗 更新时间:2023-10-30 00:53:01 27 4
gpt4 key购买 nike

这是 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();
}
}

最佳答案

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

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

internal class UnitTest
{
[Fact]
public TestDbInterface()
{
var someClass = new SomeClass(new MockedSomeOtherClass())

var result = someClass.SomeMethod()

Assert.AreEqual("42", result);
}
}

这允许您进行单元测试,而无需执行昂贵的操作,例如设置为已知状态并在测试机器上运行完整的数据库服务器以测试不针对数据层类的测试。

关于c# - 为什么要有一个不做任何特殊事情的内部构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18405055/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com