かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

単体テストしやすいクラスの書き方

単体テストしやすいように依存するクラスをコンストラクタから指定して、テスト時と本番時で差し替え可能にする方法ってあると思います。
今まで、そういうコードを書くときはこう書いてました。

class Hoge
{
  private IFoo foo;
  public Hoge(IFoo foo)
  {
    this.foo = foo;
  }
  // 本番用にデフォルトのインスタンスを渡す
  public Hoge() : this(new Foo()) {}
}

こうしておけばテスト時に以下のように書けます。

var h = new Hoge(new FooMock());

ただ、こういう書き方もできるんだなというのを見つけました。

class Hoge
{
  private IFoo foo;
  // デフォルトの引数でnullを渡しておく
  public Hoge(IFoo foo = null)
  {
    // nullだったら本番用インスタンス作る。
    this.foo = foo ?? new Foo();
  }
}

書き方としてはコンパクト!!いいかも??