首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Moq模拟TraceListener

使用Moq模拟TraceListener
EN

Stack Overflow用户
提问于 2011-01-23 02:43:05
回答 2查看 1.3K关注 0票数 5

为什么Moq验证失败,并显示"Moq.MockException : Invocation not performed on the mock"?

代码语言:javascript
复制
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));
EN

回答 2

Stack Overflow用户

发布于 2013-03-26 17:58:48

我知道这个问题已经在这里讨论了很长时间,但答案如下…

当您通过TraceSource编写跟踪事件时,它会调用跟踪侦听器的TraceEvent方法来执行跟踪-因此您需要验证对listener.TraceEvent的调用,而不是listener.WriteLine……

代码语言:javascript
复制
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");

希望这对某些人有帮助!

干杯,

摩根

票数 6
EN

Stack Overflow用户

发布于 2011-02-20 04:56:00

该测试声明必须调用WriteLine方法,但它没有调用。看一下代码,这很可能是因为这个测试暴露了TraceSource.TraceEventTraceSource.Flush方法中的一个bug。仔细检查这些方法,您就应该可以使用了!

另请参见this question

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4769795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档