什么是模拟记录和播放?

问题描述 投票:3回答:2

我有一个模拟如下:

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 }

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

mocking rhino-mocks
2个回答
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


1
投票

Record块用于记录期望值,因此在ReplayAll之前会出现什么。

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

你可以在这里阅读更多相关信息:link text

© www.soinside.com 2019 - 2024. All rights reserved.