【问题标题】:What's a good way to write Unit tests for code with protected objects C# (using NMock, and NUnit framework)什么是使用受保护对象 C# 编写单元测试的好方法(使用 NMock 和 NUnit 框架)
【发布时间】:2008-11-20 21:55:36
【问题描述】:

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

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

示例 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()
   { ... }    

}

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

示例 3:

public class MyClass
{

   public object DoSomething()
   {

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

   public int MethodA()
   { ... }    

}

有没有办法在 MethodA 仅用作委托时对其进行测试?

【问题讨论】:

    标签: c# unit-testing nunit nmock


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-02
        • 2020-03-19
        • 2010-09-26
        相关资源
        最近更新 更多