为什么 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/

10-13 09:29