为什么Moq验证失败,并显示"Moq.MockException : Invocation not performed on the mock"?
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));发布于 2013-03-26 17:58:48
我知道这个问题已经在这里讨论了很长时间,但答案如下…
当您通过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");希望这对某些人有帮助!
干杯,
摩根
发布于 2011-02-20 04:56:00
该测试声明必须调用WriteLine方法,但它没有调用。看一下代码,这很可能是因为这个测试暴露了TraceSource.TraceEvent或TraceSource.Flush方法中的一个bug。仔细检查这些方法,您就应该可以使用了!
另请参见this question。
https://stackoverflow.com/questions/4769795
复制相似问题