以下是流畅的界面:
public interface IReporter<in T,out TResult>
{
IReporter<T, TResult> Add(T seed);
TResult Prepare();
}
在代码中使用:
string errorReport = ErrorReporter.Add(exception).Prepare();
模拟测试用例:
With.Mocks(mockRepository)
.Expecting(() =>
{
Expect.Call(errorReporter.Add(null)).IgnoreArguments();
Expect.Call(errorReporter.Prepare()).Return(string.Empty);
Expect.Call(notifier.Notify(null)).IgnoreArguments().Return(true);
})
.Verify(() =>
{
ITransporter transporter = new Transporter
{
ExpectedArgsLength = 1,
Notifiers = notifiers,
ErrorReporter = errorReporter
};
transporter.Run(new string[] { });
});
错误:
Rhino.Mocks.Exceptions.ExpectationViolationException:IReporter`2.Prepare();预期#1,实际#0。
如果我评论Expect.Call(errorReporter.Prepare())。Return(string.Empty);然后它对我有用。
我错过了什么吗?请帮忙!
答案 0 :(得分:1)
Expect.Call(errorReporter.Add(null)).IgnoreArguments().Return(errorReporter);
你需要告诉模拟对象将对调用Add期望的对象返回到Add,以便将这些调用链接在一起。说实话,我很惊讶当Add返回null并且在空引用上调用Prepare时,它不会因nullreferenceexception而失败。