代码之家  ›  专栏  ›  技术社区  ›  Flynn1179

在单元测试中构造模拟

  •  3
  • Flynn1179  · 技术社区  · 15 年前

    在测试调用构造函数的代码时,有没有办法构造一个模拟实例而不是一个真实实例?

    例如:

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

    在本例中,我需要创建一个单元测试,以确认对ClassToTest实例调用MethodToTest确实会输出MyObject新创建实例的ToString()方法的任何结果。

    1 回复  |  直到 15 年前
        1
  •  3
  •   David M    15 年前

    不是真的。你的 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()
      {
      }
    }
    

    dependency injection inversion of control .