2011-01-22 4 views
4

なぜMoq Verifyが "Moq.MockException:呼び出しがモックで実行されませんでした"で失敗するのですか?MoqでTraceListenerをモックする

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)); 
+0

+1素敵な見出し! – abel

答えて

0

テストはWriteLineメソッドが呼び出されなければならないと述べているが、そうではありません。コードを見ると、このテストではTraceSource.TraceEventまたはTraceSource.Flushメソッドにバグが公開されている可能性があります。それらの方法を再確認してください。

また、this questionを参照してください。

+0

偽を使用すると、WriteLineメソッドが呼び出されます。 – Lybecker

+0

偽の何?あなたは偽でどういう意味ですか?私の答えに記載されている2つのmetodsを投稿してください。おそらくそれから何かを見ることができます。 – vidstige

+0

おそらくFake Framework。 – abatishchev

4

私はあなたがTraceSourceの経由トレースイベントを書くとき、それはトレースを行うには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"); 

... listener.WriteLine、listener.TraceEventへの呼び出しを検証する必要はありません!

乾杯、

モルガン

+0

+1 - ニースの答え!あなたの答えとは無関係に、[あなたの量子化コード](http://sariendotnet.googlecode.com/svn-history/r20/trunk/convert/AgiConvert/AgiConvert/src/Quantizer.cs)は非常に人気があり、多くの多くのライセンスの下で他のライブラリ。私はオリジナルのQuantizer&OctreeQuantizerクラスを見つけることができる場所があるので、適切なリファレンスと認識を追加できます。ありがとう! –

+0

ブランドン - ありがとう!元の記事はMSDN、http://msdn.microsoft.com/en-us/library/aa479306.aspxにあります。これには、ソースコードへのリンクが含まれます。私はもはやマイクロソフトのために働いていないが、オリジナルへのリンクは何よりも優れている! –

+0

素晴らしい!参考文献とコードに感謝します。それは確かに私に時間の節約をもたらしました。 –

関連する問題