0

我正在通过摆弄现有项目来尝试使用 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 并将两个接口都传递给 ThatThing?

4

1 回答 1

0

IoC 容器的问题在于它们无法控制对象的生命周期。为什么使用 ThisThingBase 上的工厂方法?如果有可能让 IoC 容器构造 Thatthing 它将增加可测试性。

根据示例很难说,但您可能在 Thatthing 和 ThisThingBase 之间存在不必要的耦合。

接口可能很好,但有时使用您所依赖的类上的虚拟方法来启用测试就足够了。

于 2008-12-02T18:22:34.337 回答