簡體   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