[英]c# constructor vs initialize
做TDD并想隔离被测方法: Direct();
但是,当测试创建MyClass
, SomeClass.SetupStuff();
炸毁( NotImplementedException
)。 因此,修改了IMyClass
接口以使其具有Configure();
IMyClass
可以在构造MyClass
之后避免发生异常的方法。
问题:这是处理这种情况的一种可接受的方法,还是有一些基本的OOP原则被打破?
public class MyClass : IMyClass
{
public MyClass()
{
// class with static method that sets stuff up
SomeClass.SetupStuff();
}
public void IMyClass.Direct()
{
// want to test this
}
}
VS
public class MyClass : IMyClass
{
public MyClass()
{
}
public void IMyClass.Direct()
{
// want to test this
}
//
public void IMyClass.Configure()
{
// class with static method that sets stuff up
SomeClass.SetupStuff();
}
}
避免此类问题的一种方法是使用依赖注入
public class MyClass : IMyClass
{
public MyClass(ISomeClass someClass)
{
someClass.SetupStuff();
}
public void IMyClass.Direct()
{
// want to test this
}
}
通过将类与SomeClass分离,您可以在测试过程中自由提供ISomeClass的模拟实现,并且可以在运行时提供完整的实现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.