Что такое Mocks, запись и воспроизведение? - PullRequest
3 голосов
/ 08 июля 2010

У меня есть макет, как показано ниже:

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 ]

1 голос
/ 08 июля 2010

Это просто еще один синтаксис, чтобы сделать то же самое. Следующие значения эквивалентны:

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 голос
/ 08 июля 2010

Блок Record используется для записи ожиданий, поэтому, что предшествует ReplayAll.

Блок воспроизведения на самом деле вызывает тест, так что будет после ReplayAll.

Подробнее об этом можно прочитать здесь: текст ссылки

...