我无法让递归模拟工作。
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。
任何想法?
答案 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
?