Rhono Mocks: оба .Stub И .Expect в методе интерфейса - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть набор из нескольких сотен модульных тестов, которые высмеивают трассировщик, который передается различным тестируемым методам.

interface ITracer {
  void Info (string message);
  void Warn (string message, Exception x = null);
  void Error (string message, Exception x = null);
}

При инициализации тестов трассируется насмешка:

var tracer = MockRepository.GenerateMock<ITracer>();
// This stub here prevents Expect from working properly
tracer.Stub(t => t.Error(message: Arg<string>.Is.Anything, exception: Arg<Exception>.Is.Anything)
      .WhenCalled(_ => Debug.WriteLine(" [E] {1} {2}", _.Arguments[0], _.Arguments[1]));

Тогда каждый тест может создать некоторые ожидания:

tracer.Expect(trace => trace.Error(message: Arg<string>.Is.Anything, exception: Arg<Exception>.Is.Anything))
       .Repeat.AtLeastOnce()

В конце каждого теста трассировщика проверяются ожидания: tracer.VerifyAllExpectations()

Проблема в том, что, как только я добавил .Stub к смоделированному трассировщику, ожидания ошибок не работают, и жалуются, что возникает 0 случаев, когда я вижу ошибки, отслеженные в результатах теста.

Как правильно использовать Stub () для смоделированного метода и для ожидания?

...