C# 模拟在方法调用中构造的对象
我对犀牛嘲弄和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参数传递,我也不想。。。创建这些对象是类
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();
你可以阅读更多关于它的信息