C#动态对象的模拟/存根框架

时间:2011-09-16 13:56:06

标签: c#-4.0 dynamic mocking

我正在寻找一个可用于测试使用动态对象的C#代码的框架。我希望能够指定方法存根并设置模拟期望,就像在界面上使用Rhino Mocks之类的东西一样

e.g。类似于以下使用Rhino Mocks样式

var fakeService = MockRepository.GenerateStub<dynamic>();
fakeService.Stub(s => s.SomeMethod(Arg.Is(someValue))).Returns(someResult);
sut.MethodUnderTest(fakeService);

var fakeService = MockRepository.GenerateMock<dynamic>();
fakeService.Expect(s => s.DoSomething(Arg.Is(someValue)));
sut.MethodUnderTest(fakeService);
fakeService.VerifyAllExpectations();

其中被测方法将参数声明为动态对象。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

嗯,你总是可以尝试嘲笑DynamicObject。它会看起来有点不同,但它可以用任何你想要的东西来嘲笑动态物体。

var fakeService = MockRepository.GenerateStub<DynamicObject>();
object outResult;
fakeService.Stub(s => s.TryInvokeMember(
               Property.Value("Name", "SomeMethod"),
               List.Equal(new{someValue}),
               out outResult))
           .OutRef(someResult)
           .Returns(true);
sut.MethodUnderTest(fakeService);

P.S。请删除任何犀牛模拟语法问题,我之前使用MOQ完成了这个,我刚刚用Rhino Mocks快速参考指南写出了相同的概念。