2
做TDD並希望隔離被測方法:Direct();
然而,當測試創建MyClass
,SomeClass.SetupStuff();
炸掉(NotImplementedException
)。因此,將IMyClass
接口修改爲具有Configure();
方法,可以在MyClass
構造之後調用該方法以避免該異常。c#構造函數與初始化
問題:這是處理這種情況的一種可接受的方式,或者是否存在一些基本的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();
}
}
在實例方法中設置靜態數據對我來說似乎很奇怪。 – Tilak
這有點令人困惑。如果你正在做TDD,那麼這意味着你的測試*應該失敗*直到你實現需要實現的東西。如果你還沒有實現'SomeClass.SetupStuff',那麼你需要實現它才能通過測試。我想我只是不明白這裏的問題。將代碼移回'.ctor'並實現該方法。繁榮,測試通過。 –
爲什麼不通過構造函數注入SomeClass。不要讓它變成靜態的。而不僅僅是爲了你的測試而嘲笑它。你的課目前依賴於SomeClass。你想測試Direct()而不是SomeClass – Sean