Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 什么';这是为带有受保护对象的代码编写单元测试的好方法(使用NMock和NUnit框架)_C#_Unit Testing_Nunit_Nmock - Fatal编程技术网

C# 什么';这是为带有受保护对象的代码编写单元测试的好方法(使用NMock和NUnit框架)

C# 什么';这是为带有受保护对象的代码编写单元测试的好方法(使用NMock和NUnit框架),c#,unit-testing,nunit,nmock,C#,Unit Testing,Nunit,Nmock,当为包含其他对象的单个类编写单元测试时,最好的使用方法是什么 模拟对象以避免依赖于其他类的测试 例1: public class MyClass { protected MyObject _obj; public MyClass() { _obj = new MyObject(); } public object DoSomething() { //some work _obj.MethodCall();

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

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

例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仅用作委托时,有没有办法测试它?

您是否尝试过从MyClass派生UTMyClass

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