[英]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.