这是这个封闭问题的分离,我有一个答案,但在我回应之前它已经关闭了.以下是该问题的调整版本:
为什么一个类有一个只设置属性的内部构造函数?
public class SomeClass
{
public SomeClass() : this(new SomeOtherClass()) { }
internal SomeClass(SomeOtherClass c) { _someField = c; }
private SomeOtherClass _someField;
protected void SomeMethod() {
var foo = _someField.Bar();
}
}
Run Code Online (Sandbox Code Playgroud)
这有什么好处,你为什么不这样做:
public class SomeClass
{
public SomeClass() { _someField = new SomeOtherClass(); }
private SomeOtherClass _someField;
protected void SomeMethod() {
var foo = _someField.Bar();
}
}
Run Code Online (Sandbox Code Playgroud)
有一个protected或internal构造这样是为了这个共同做用测试依赖注入.
当您正常调用代码时,它只是创建一个实例,SomeOtherClass但是当您运行单元测试时,您可以让它通过SomeOtherClass模拟它的模拟版本(假设SomeOtherClass是您的数据层接口,SomeClass是您的业务逻辑层类,模拟类伪造对DB的调用并返回结果,就像它连接到DB一样)
internal class UnitTest
{
[Fact]
public TestDbInterface()
{
var someClass = new SomeClass(new MockedSomeOtherClass())
var result = someClass.SomeMethod()
Assert.AreEqual("42", result);
}
}
Run Code Online (Sandbox Code Playgroud)
这允许您进行单元测试,而无需执行昂贵的操作,例如设置为已知状态并在测试计算机上运行完整数据库服务器,以测试不针对数据层类的测试.
| 归档时间: |
|
| 查看次数: |
129 次 |
| 最近记录: |