c#constructor vs initialize

时间:2013-11-04 17:42:40

标签: c# unit-testing tdd

进行TDD并希望隔离测试中的方法:Direct(); 但是,当测试创建MyClass时,SomeClass.SetupStuff();会爆炸(NotImplementedException)。因此,修改了IMyClass接口以使Configure();方法可以在构造MyClass之后调用,以避免异常。

问题:这是处理这种情况的可接受的方式还是有一些基本的OOP主体,这会破坏?

public class MyClass : IMyClass
{
  public MyClass()
  {
     // class with static method that sets stuff up
     SomeClass.SetupStuff();
  }
  public void IMyClass.Direct()
  {
     // want to test this
  }
}

VS

public class MyClass : IMyClass
{
  public MyClass()
  {

  }
  public void IMyClass.Direct()
  {
     // want to test this
  }
  //
  public void IMyClass.Configure()
  {
    // class with static method that sets stuff up
    SomeClass.SetupStuff();
  }
}

1 个答案:

答案 0 :(得分:5)

避免此类问题的一种方法是使用依赖注入

public class MyClass : IMyClass
{
    public MyClass(ISomeClass someClass)
    {
        someClass.SetupStuff();
    }

    public void IMyClass.Direct()
    {
       // want to test this
    }
}

通过将类与SomeClass分离,您可以在测试期间自由地提供ISomeClass的模拟实现,并且可以在运行时提供完整的实现。