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# 模拟在方法调用中构造的对象_C#_Unit Testing_Mocking_Mstest_Rhino Mocks - Fatal编程技术网

C# 模拟在方法调用中构造的对象

C# 模拟在方法调用中构造的对象,c#,unit-testing,mocking,mstest,rhino-mocks,C#,Unit Testing,Mocking,Mstest,Rhino Mocks,我对犀牛嘲弄和C#中的嘲弄还不熟悉,虽然不是一般的。我正在为类MyClass编写单元测试,该类在内部创建其他对象作为私有字段。我已经分别对这些类进行了单元测试,但没有测试MyClass如何与它们交互 class MyClass { public void Method1() { var o = new OtherClass(); o.Method2(); o.Method3(); } } 请注意,我没有将OtherClass作为ctor参数传递,我也不想。。。创建这些对象是类

我对犀牛嘲弄和C#中的嘲弄还不熟悉,虽然不是一般的。我正在为类
MyClass
编写单元测试,该类在内部创建其他对象作为私有字段。我已经分别对这些类进行了单元测试,但没有测试
MyClass
如何与它们交互

class MyClass
{
 public void Method1()
 {
  var o = new OtherClass();
  o.Method2();
  o.Method3();
 }
}
请注意,我没有将
OtherClass
作为ctor参数传递,我也不想。。。创建这些对象是类所做的事情,我不希望外部代理注入它们


Rhino Mocks是否允许我在这个场景中通过单元测试以某种方式模拟
OtherClass
,这样我就可以确定实例是否正确创建并与之交互?

否,Rhino Mocks Mocks不支持此功能。Rhinomocks/Moq/FakeItEasy/NSubstitute都是基于代理的工具,这意味着它们中没有一个能够在不重构的情况下隔离代码

为了能够在不重构的情况下进行隔离,您需要使用代码编织工具,如、等

不知何故,在社区中,在同一个项目中组合两个模拟框架并不流行,然而当我在.net世界时,我通常将Rhinomock和Msfakes结合在一起

  • Rhinomock作为默认模拟框架
  • 仅在必要时才使用MSFake(对于常规情况,Rhinomock更好……);静态/密封等

  • 免责声明我在TypeMock工作

    在使用Typemock Isolator时,很容易伪造未来的实例,实际上可以在一行中完成:

        var classUnderTest = new MyClass();
        // Faking future OtherClass 
        var fakeOther = Isolate.Fake.NextInstance<OtherClass>();
    
    var classUnderTest=new MyClass();
    //假装未来的另一类
    var fakeOther=Isolate.false.NextInstance();
    
    你可以阅读更多关于它的信息