Подсчет вызовов методов в Rhino Mocks - PullRequest
7 голосов
/ 27 июля 2011

Итак: я бы хотел посчитать вызовы методов в Rhino Mocks чем-то более конкретным, чем Any (), Once () или AtLeastOnce (). Есть ли механизм для этого?

1 Ответ

10 голосов
/ 27 июля 2011

Хитрость заключается в том, чтобы использовать Repeat.Times (n), где n - количество раз.

Удивительно, что приведенный ниже тест пройдет, даже если метод вызывается чаще, чем ожидалось:

[Test]
public void expect_repeat_n_times_does_not_work_when_actual_greater_than_expected() {
  const Int32 ActualTimesToCall = 6;
  const Int32 ExpectedTimesToCall = 4;

  var mock = MockRepository.GenerateMock<IExample>();
  mock.Expect(example => example.ExampleMethod()).Repeat.Times(ExpectedTimesToCall);

  for (var i = 0; i < ActualTimesToCall; i++) {
      mock.ExampleMethod();
  }

  // [?] This one passes
  mock.VerifyAllExpectations();
}

Чтобы обойти это, используйте следующий метод:

[Test]
public void aaa_repeat_n_times_does_work_when_actual_greater_than_expected() {
  const Int32 ActualTimesToCall = 6;
  const Int32 ExpectedTimesToCall = 4;

  var mock = MockRepository.GenerateMock<IExample>();

  for (var i = 0; i < ActualTimesToCall; i++) {
      mock.ExampleMethod();
  }

  // This one fails (as expected)
  mock.AssertWasCalled(
      example => example.ExampleMethod(),
      options => options.Repeat.Times(ExpectedTimesToCall)
  );
}

Источник: http://benbiddington.wordpress.com/2009/06/23/rhinomocks-repeat-times/ (см. Объяснение)

РЕДАКТИРОВАТЬ: редактируется только вПодводя итог, спасибо за полезный ответ.

...