5

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));
4

2 に答える 2

6

この質問は長い間ここにあったことは知っていますが、答えは次のとおりです...

TraceSource を介してトレース イベントを書き込むと、トレース リスナーの TraceEvent メソッドが呼び出されてトレースが実行されるため、listener.WriteLine ではなく、listener.TraceEvent への呼び出しを確認する必要があります。

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.TraceEventまたはTraceSource.Flushメソッドのバグが明らかになったためです。これらの方法を再確認してください。

また、この質問を参照してください。

于 2011-02-19T20:55:59.797 に答える