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 回答