我正在通过摆弄现有项目来尝试使用IoC前往TDD。简而言之,我的问题是:当公共和非公共方法受到关注时,围绕IoC的最佳实践是什么?
有两个类:
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。
我应该定义第二个接口 - 可能是IThingInternal - 对于这两种方法并将BOTH接口传递给ThatThing吗?
答案 0 :(得分:0)
IoC容器的问题在于它们无法控制对象的生命周期。为什么在ThisThingBase上使用工厂方法?如果有可能让IoC容器构建那个东西,它会增加可测试性。
根据示例很难说,但是你可能在Thatthing和ThisThingBase之间有不必要的耦合。
接口可能很好,但有时候,您依赖的类上的虚拟方法足以启用测试。