5

为什么 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));
4

2 回答 2

6

我知道这个问题已经在这里很久了,但是答案如下......

当您通过 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");

希望这对某人有帮助!

干杯,

摩根

于 2013-03-26T09:58:47.627 回答
0

测试表明WriteLine必须调用该方法,但事实并非如此。查看代码,这很可能是因为该测试暴露了您的TraceSource.TraceEventorTraceSource.Flush方法中的错误。仔细检查这些方法,你应该很高兴!

另外,请参阅这个问题

于 2011-02-19T20:55:59.797 回答