c# - 为什么在使用 Rhino Mocks stub 函数时需要 Replay()?

标签 c# .net rhino-mocks

var contextChannel = this.MockRepository.Stub<IContextChannel>();
var context = this.MockRepository.Stub<IOperationContext>();
context.Stub(x => x.Channel).Return(contextChannel);
context.Replay();

Replay 有什么用?

我知道在录制然后回放 Action 的情况下,Replay() 调用是必要的。但是我不明白为什么在我什么都不记录的情况下还要强制我多写一行代码。我只需要一个返回我的对象​​的属性。

最佳答案

更新:

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

var contextChannel = MockRepository.GenerateStub<IContextChannel>();
var context = MockRepository.GenerateStub<IOperationContext>();
context.Stub(x => x.Channel).Return(contextChannel);

这里是一些文档:

原始答案

你不知道。在像您这样的情况下,不再需要调用 Replay

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

在幕后,仍然有模拟的记录和回放状态。 Stub 等方法将 mock 置于记录状态,对其进行配置,然后将它们放回记录状态。在这些情况下,您不需要显式调用 Record

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

mock.BackToRecord(BackToRecordOptions.All);
mock.Replay();

关于c# - 为什么在使用 Rhino Mocks stub 函数时需要 Replay()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9428647/

相关文章:

c# - 对接口(interface)存储库进行单元测试的目的是什么

c# - PartialView 方法返回 Null(似乎根本没有调用 View )

c# - 如何在我的 XAML 中使用另一个自定义控件基类,使 WPF 在我的 View 中实例化一个自定义控件?

java - 为什么 Java、C# 程序第二次运行速度更快

.net - 阻止 .NET 代码调用特定方法?

javascript - 动态将从 Controller 返回的选择框值呈现为 json

c# - 将 WHERE 语句添加到 LINQ lambda 表达式

.net - 为什么我的控制台应用程序在使用 Process.Start() 启动时没有图标?

c# - 如何检查 Action 对 View() 的调用没有抛出异常?

c# - 如何强制使用 void 方法从 Stub 对象返回 Void?