簡體   English   中英

使用Moq模擬TraceListener

[英]Mocking a TraceListener with Moq

為什么Moq Verify失敗並出現“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的調用,而不是偵聽器.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");

希望這有助於某人!

干杯,

摩根

測試表明必須調用WriteLine方法,但事實並非如此。 查看代碼很可能是因為此測試暴露了TraceSource.TraceEventTraceSource.Flush方法中的錯誤。 仔細檢查那些方法你應該好好去!

另外,請看這個問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM