かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

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

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

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();
  }
}

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