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

时间:2016-05-10 10:57:35

标签: 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参数传递,我真的不想...创建这些对象是类所做的事情,我真的不希望外部代理注入它们

Rhino Mocks是否允许我以某种方式在单元测试中模拟OtherClass这个场景中,因此我可以确定实例是否已正确创建并进行交互?

2 个答案:

答案 0 :(得分:1)

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

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

不知何故,在同一个项目中将2个模拟框架组合在一起,在社区中并不是那么受欢迎,但是当我在.net世界时,我通常将Rhinomocks和Msfakes结合在一起;

  • Rhinomocks作为默认模拟框架
  • 仅在必要的地方使用女士(对于常规情况,Rhinomocks更好......);静电/密封等...

答案 1 :(得分:1)

免责声明我在TypeMock工作。

使用Typemock Isolator时伪造未来的实例非常简单,实际上它可以在一行中完成:

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

您可以阅读更多相关信息here