当使用Rhino Mocks对函数进行存根时,为什么需要重放()?

Vas*_*iak 7 .net c# rhino-mocks

var contextChannel = this.MockRepository.Stub<IContextChannel>();
var context = this.MockRepository.Stub<IOperationContext>();
context.Stub(x => x.Channel).Return(contextChannel);
context.Replay();
Run Code Online (Sandbox Code Playgroud)

什么是重播?

我知道在录制和播放动作的情况下,Replay()调用是必要的.但是我不清楚为什么在我没有记录任何内容的情况下我被迫再编写一行代码.我需要的只是一个返回我的对象​​的属性.

Ste*_*ger 7

更新:

您没有正确使用AAA语法.您不再需要MockRepository的实例(这已经在3.5之前用于Rhino).只需在MockRepository上调用静态方法:

var contextChannel = MockRepository.GenerateStub<IContextChannel>();
var context = MockRepository.GenerateStub<IOperationContext>();
context.Stub(x => x.Channel).Return(contextChannel);
Run Code Online (Sandbox Code Playgroud)

这是一些文档:

原始答案

你没有.不再需要Replay像你这样的情况打电话了.

在以前的版本中,有一个"记录重放"范例,您可以记录期望并在测试期间重播它们.它已被AAA语法所取代,您可以更轻松,更灵活地设置模拟.

在幕后,仍然有模拟的记录和重播状态.类似Stub的方法是将模拟放入记录状态,配置它,并将它们放回记录.Record在这些情况下,您无需显式调用.

如果你想做一些更高级的操作,你可以自己设置模拟重放状态,用它做一些事情,例如.为了重置期望:

mock.BackToRecord(BackToRecordOptions.All);
mock.Replay();
Run Code Online (Sandbox Code Playgroud)