RhinoMocks эквивалент возврата. CloneOf в NMock - PullRequest
1 голос
/ 17 февраля 2012

У нас есть свойство NextInterestDate для rhinomock, которое мы изначально установили на 31.03.2000.К этому свойству обращаются, и эта дата используется при обработке расчетов процентов за март.Когда мартовская обработка завершена, свойство должно быть обновлено, чтобы быть следующей хронологической процентной датой, которая является 30/04/2000.

В следующий раз в цикле мы хотим, чтобы макет возвращал дату окончания апреля, когдаДоступ к NextInterestDate осуществляется на макете.Короче говоря, новая дата пересчитывается каждый раз вокруг цикла, а свойство макета переназначается с новой датой.

Это означает, что дата в макете должна обновляться каждый раз вокруг цикла.

Однако мы видим, что дата остается на 31/03/2000, а не корректно обновляется.

Мы относительно новички в RhinoMocks, но мы намного предпочитаем их NMocks, хотя, кажется, чтобыть крутой кривой обучения.

Для решения этой проблемы предыдущий разработчик использовал NMock и использовал клонируемый класс, который она использовала NMocks ... Return.CloneOF, который позволял макету иметь возможность обновлять макет и поставлятьновое значение.

Мы просто не можем понять правильный синтаксис / или способ достижения этого.

Заранее большое спасибо С уважением Колин

1 Ответ

1 голос
/ 17 февраля 2012

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

var expectedDates = new[]
{
    new DateTime(2000, 3, 31),
    new DateTime(2000, 4, 30),
    new DateTime(2000, 5, 31),
};

var invocationsCount = 0;
service.Expect(s => s.NextInterestDate)
    .WhenCalled(m => m.ReturnValue = expectedDates[invocationNumber++])
    .Return(default(DateTime));

То, что делает приведенный выше код, просто берет следующий элемент из массива expectedDates при каждом последующем вызове.Должен быть странный вызов Return(default(DateTime)) в конце (иначе Rhino будет жаловаться).Не беспокойтесь, поддельное возвращаемое значение игнорируется , когда мы уже указываем его с помощью WhenCalled.

Обратите внимание, что вам нужно быть осторожным с кодом, подобным приведенному выше (инкрементные счетчики, массивы - все это в фиктивной настройке).Читаемость не самая лучшая, поэтому правильное именование переменных / методов тестирования имеет решающее значение.

...