进行TDD并希望隔离测试中的方法:Direct();
但是,当测试创建MyClass
时,SomeClass.SetupStuff();
会爆炸(NotImplementedException
)。因此,修改了IMyClass
接口以使Configure();
方法可以在构造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();
}
}
答案 0 :(得分:5)
避免此类问题的一种方法是使用依赖注入
public class MyClass : IMyClass
{
public MyClass(ISomeClass someClass)
{
someClass.SetupStuff();
}
public void IMyClass.Direct()
{
// want to test this
}
}
通过将类与SomeClass分离,您可以在测试期间自由地提供ISomeClass的模拟实现,并且可以在运行时提供完整的实现。