だから、私はレガシーコードで効果的に働くを読んでいます。それは素晴らしく、テストされていないコードで使用しても「安全」な多くのクールなテクニックをカバーしています.
それについての私のお気に入りの部分の 1 つは、面倒な依存関係がある場合にテストする予定のクラスを拡張することを提案することです。例えば
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 では、できる限りシンプルにする必要があります。では、これは設計上保持しても問題ないのでしょうか?