4

为包含其他对象的单个类编写单元测试时,最好的使用方法是什么

模拟对象以避免依赖于其他类的测试。

示例 1:

public class MyClass
{
   protected MyObject _obj;

   public MyClass()
   {
       _obj = new MyObject();
   }

   public object DoSomething()
   {
      //some work
      _obj.MethodCall();
      //more work;
      return result;
   }
}

我宁愿不公开受保护的值来为代码创建单元测试。包装类将

为测试工作,但有更好的方法吗?

示例 2:

public class MyClass
{

   public object DoSomething()
   {

      //some work
      MyObject obj = new obj(parameters);
      _obj.MethodCall(Method1);
      //more work;
      return result;
   }

   public int Method1()
   { ... }    

}

与上面的示例类似,但 ojbect 是在我调用的方法中创建的。

示例 3:

public class MyClass
{

   public object DoSomething()
   {

      //some work
      obj.MethodCall(Method1);
      //more work;
      return result;
   }

   public int MethodA()
   { ... }    

}

当 MethodA 仅用作委托时,有没有办法测试它?

4

2 回答 2

1

我建议你看看依赖注入。一件事是使用模拟对象,但除非您使用诸如 TypeMock 之类的东西,它基本上可以让您动态修改代码,否则您希望有一种方法来注入您的类所依赖的实例,如果您想摆脱依赖关系。因此,在示例 1 中,我建议不要在构造函数中新建 MyObject 的实例,而是让调用者提供该实例。在这种情况下,您可以轻松地用模拟甚至存根替换它。

于 2008-11-20T22:49:13.253 回答
0

您是否尝试过从 MyClass 派生 UTMyClass?

于 2008-11-20T22:48:52.163 回答