什么是模拟记录和播放?

时间:2010-07-08 08:53:12

标签: mocking rhino-mocks

我有一个模拟如下:

MockRepository mocks = new MockRepository();
ILoanRepository loanRepo = mocks.StrictMock<ILoanRepository>();
SetupResult.For(loanRepo.GetLoanExtended("sdfsdf")).Return(list.AsEnumerable<Loan>());
mocks.ReplayAll();

我的问题是我已经看到上面用于使用语句,例如

using (mocks.Record()) { // code here }
using (mocks.Playback()) { // code here }

这个的目的是什么,与我所做的不同之处是什么?

2 个答案:

答案 0 :(得分:1)

Record块用于记录期望值,因此在ReplayAll之前会有所记录。

Playback块实际上正在调用测试,所以在ReplayAll之后会出现什么。

您可以在此处详细了解:link text

答案 1 :(得分:1)

这些只是做同样事情的另一种语法。以下是等效的:

MockRepository mocks = new MockRepository();
ILoanRepository loanRepo = mocks.StrictMock<ILoanRepository>();
SetupResult.For(loanRepo.GetLoanExtended("sdfsdf")).Return(list.AsEnumerable<Loan>());
mocks.ReplayAll();
//test execution

MockRepository mocks = new MockRepository();
using (mocks.Record()) {
    ILoanRepository loanRepo = mocks.StrictMock<ILoanRepository>();
    SetupResult.For(loanRepo.GetLoanExtended("sdfsdf")).Return(list.AsEnumerable<Loan>());
}
using (mocks.Playback()) {
    //test execution
}

为了使事情变得更复杂,有一种新的第三种语法,你没有明确的记录和回放阶段,称为Arrange,Act,Assert Syntax,参见例如http://ayende.com/blog/archive/2008/05/16/rhino-mocks--arrange-act-assert-syntax.aspx