2016-05-10 55 views
0

我是新来的Rhino Mocks和嘲笑在C#虽然不一般。我正在为类MyClass编写单元测试,它在内部将其他对象创建为专用字段。我有单位分别进行测试这些类而不是如何MyClass与之交互...嘲笑一个方法调用内构造的对象

class MyClass 
{ 
public void Method1() 
{ 
    var o = new OtherClass(); 
    o.Method2(); 
    o.Method3(); 
} 
} 

请注意,我没有通过OtherClass作为一个构造函数参数,我真的不希望...创建这些对象是类的东西,我真的不想要一个外部代理注入它们。

Rhino Mocks是否允许我以某种方式在单元测试中模拟OtherClass在这种情况下,所以我可以确定实例是否已正确创建并与之交互?

回答

1

不,Rhinomocks mocks不支持此功能。 Rhinomocks/Moq/FakeItEasy/NSubstitute都是基于代理的工具,这意味着它们不能在不重构的情况下隔离代码。

为了能够不重构你需要使用代码纺织工具隔离,如Typemock IsolatorMsfakes等..

不知怎的,它是不是在社会上如此受欢迎,以2个嘲讽框架在同一个项目合并但是当我在.net世界中时,我通常将Rhinomocks和Msfakes结合在一起;

  • Rhinomocks作为默认模拟框架
  • Msfakes只有在有必要(普通情况下Rhinomocks是更好的....);静电/密封等...
0

免责声明我在TypeMock工作。

它使用Typemock隔离时,假一未来实例非常简单,实际上它可以在一个行完成:

var classUnderTest = new MyClass(); 
    // Faking future OtherClass 
    var fakeOther = Isolate.Fake.NextInstance<OtherClass>(); 

而且你可以阅读更多关于它here