繁体   English   中英

C#构造函数与初始化

[英]c# constructor vs initialize

做TDD并想隔离被测方法: Direct(); 但是,当测试创建MyClassSomeClass.SetupStuff(); 炸毁( NotImplementedException )。 因此,修改了IMyClass接口以使其具有Configure(); IMyClass 可以在构造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();
  }
}

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM