У меня есть набор из нескольких сотен модульных тестов, которые высмеивают трассировщик, который передается различным тестируемым методам.
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 () для смоделированного метода и для ожидания?