TDD に向かう途中で、既存のプロジェクトをいじって IoC を試しています。一言で言えば、私の質問は次のとおりです。パブリック メソッドと非パブリック メソッドに関心がある場合、IoC に関するベスト プラクティスは何ですか?
次の 2 つのクラスがあります。
public abstract class ThisThingBase
{
public virtual void Method1() {}
public virtual void Method2() {}
public ThatThing GetThat()
{
return new ThatThing(this);
}
internal virtual void Method3() {}
internal virtual void Method4() {}
}
public class Thathing
{
public ThatThing(ThisThingBase thing)
{
m_thing = thing;
}
...
}
ThatThing は、ThisThingBase 参照を使用して、ThisThingBase の子孫によってしばしばオーバーロードされるメソッドを呼び出すいくつかのことを行います。
Method1 と Method2 はパブリックです。Method3 と Method4 は内部であり、ThatThings によってのみ使用されます。
ThisThing なしで ThatThing をテストしたいと思います。
IoC について調べてみたときに最初に考えたのは、IThing インターフェイスを定義し、それを ThisThingBase で実装して、それを ThatThing コンストラクターに渡す必要があるということでした。IThing はクライアントが呼び出すことができるパブリック インターフェイスですが、ThatThing も必要とする Method3 または Method4 は含まれていません。
これらの 2 つのメソッドに対して 2 番目のインターフェイス (おそらく IThingInternal) を定義し、両方のインターフェイスを ThatThing に渡す必要がありますか?