我有一组数百个单元测试,它们模拟了一个传递给被测方法的跟踪器。
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()模拟方法和建立期望的正确方法是什么?