RhinoMock - 递归模拟

时间:2012-01-31 15:40:28

标签: rhino-mocks

我无法让递归模拟工作。

SomeClass someMOck = MockRepository.GenerateMock<SomeClass>();

//SomeClass is having another class as a property.

someMock.Stub(x => x.Manager.SomeData).Return("Hello");

在运行时它会抛出错误。

System.InvalidOperationException:上一个方法 'SomeClass.get_Manager();'需要返回值或 抛出异常。

我正在使用3.6 build 21。

任何想法?

1 个答案:

答案 0 :(得分:2)

这是因为您没有为someeClass.Manager指定值。

您需要模拟Manager类并将其设置为someeClass.Manager的返回值。

SomeClass someMock= MockRepository.GenerateMock<SomeClass>();
Manager managerMock= MockRepository.GenerateMock<Manager>(); 

managerMock.Stub(x => x.SomeData).Return("Hello");
someMock.Stub(x => x.Manager).Return(managerMock);

但另一件事与代码设计有关。 Law Of Demeter表示您不应在代码中使用嵌套的property.property。您应该只传递真正必要的信息,并确保使用传入的所有内容。那么访问完整的Manager对象是否真的有必要转到SomeData