为什么 Moq 验证失败并显示“Moq.MockException:未在模拟上执行调用”?
var mock = new Mock<TraceListener>();
var ts = new TraceSource("traceSourceName", SourceLevels.Verbose);
ts.Listeners.Add(mock.Object);
var message = "the message";
ts.TraceEvent(TraceEventType.Verbose, 0, message);
ts.Flush();
mock.Verify(x => x.WriteLine(message));
最佳答案
我知道这个问题已经存在很长时间了,但答案如下......
当您通过 TraceSource 编写跟踪事件时,它会调用您的跟踪监听器 TraceEvent 方法来进行跟踪 - 因此您需要验证对 listener.TraceEvent 的调用,而不是 listener.WriteLine...
var mock = new Mock<TraceListener>();
var ts = new TraceSource("traceSourceName", SourceLevels.Verbose);
ts.Listeners.Add(mock.Object);
var message = "the message";
ts.TraceEvent(TraceEventType.Verbose, 0, message);
mock.Verify(x => x.TraceEvent(It.IsAny<TraceEventCache>(), "traceSourceName",
TraceEventType.Verbose, 0, message), Times.Once(), "Expected a trace");
希望这可以帮助某人!
干杯,
摩根
关于c# - 使用 Moq 模拟 TraceListener,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4769795/