所以,我一直在閱讀有效地使用遺留代碼。這很棒,涵蓋了許多很酷的技術,這些技術對未經測試的代碼也是「安全」的。從你打算測試的類繼承是否總是次優的?
我最喜歡的部分之一是建議擴展你打算測試的類,當有麻煩的依賴關係時。例如
class FooBar
{
public List<Foo> ReadFoos()
{
var s=new SqlConnection(Config.SomeConntectionStirng);
s.Read("Foo")....
}
}
被重構到
class FooBar
{
public List<Foo> ReadFoos()
{
var s=MyConnection();
s.Read("Foo")....
}
protected virtual IConnection MyConnection()
{
return new SqlConnection(Config.SomeConnectionString);
}
}
然後去測試它,你會繼承它,像這樣:
class TestableFooBar : FooBar
{
protected override IConnection MyConnection()
{
return new MockConnection();
}
}
和測試後擴展的類。
現在,我的問題。這可以做,而不是以後重構?我這樣說的主要原因是因爲這可能對於一些難以進行單元測試而不使調用API更難使用的代碼有用。在公共API上,你絕對希望它儘可能簡單。那麼,這是保持副設計的好方法嗎?
你沒有使用依賴注入的原因?這基本上是它的存在理由。 – 2013-02-14 22:18:31
@KirkWoll,基於他正在閱讀的書和他的問題文本,他正試圖從大概可怕的,不可測試的遺留代碼轉向更清潔的東西。這通常是一個以許多小增量完成的過程。 – 2013-02-14 22:35:08
@安東伯格啊,好點。忽略了他所引用的這本書的主題。 – 2013-02-14 22:36:54