3

コンストラクターを呼び出すコードをテストするときに、実際のインスタンスの代わりにモックを構築する方法はありますか?

例えば:

public class ClassToTest
{
  public void MethodToTest()
  {
    MyObject foo = new MyObject();
    Console.WriteLine(foo.ToString());
  }
}

この例では、ClassToTestのインスタンスでMethodToTestを呼び出すと、新しく作成されたMyObjectのインスタンスのToString()メソッドの結果が実際に出力されることを確認する単体テストを作成する必要があります。

'ClassToTest'クラスを単独で現実的にテストする方法がわかりません。このメソッドをテストすると、実際には「myObject.ToString()」メソッドとMethodToTestメソッドがテストされます。

4

1 に答える 1

3

あまり。あなたClassToTestはそのデザインのためにテストするのが難しいです。依存関係をモックオブジェクトと交換できるようにしたい場合は、これらの依存関係がどのように注入されるかを考える必要がありますが、コンストラクターで依存関係を作成するだけでは、役に立ちません。コンストラクタインジェクションを使用できます。

public class ClassToTest
{
  MyObject _foo;
  public void MethodToTest(Myobject foo)
  {
    _foo = foo;
    Console.WriteLine(foo.ToString());
  }
}

または、プロパティインジェクションを使用できます。

public class ClassToTest
{
  public MyObject Foo { get; set; }
  public void MethodToTest()
  {
  }
}

そこにコンソールを書きたい場合は、前者の方が例に適している可能性があります。多くの場合、依存関係がオプションではなくオブジェクトの依存関係である必要がある場合に最適なアプローチです。

依存性の注入制御の反転の概念を探求するよりもはるかに悪いことをする可能性があります。

于 2010-06-14T12:26:33.277 に答える