単体テストでメソッドが呼び出されているかどうかを確認するために Moq を使用しています。この特定のケースでは、テスト対象のメソッドが log4net を介してエラーをログに記録するかどうかをテストしたいと考えています。log.Error
問題は、これは、またはを呼び出すことによって実行できることlog.ErrorFormat
です。どちらでも構いません。
どうすればこれを確認できますか?両方が呼び出されたことを確認する方法しか知りません。
var logMock = new Mock<ILog>();
var myClass = new MyClass(logMock.Object);
myClass.MyMethod();
logMock.Verify(log => log.Error(It.IsAny<object>()));
logMock.Verify(log => log.ErrorFormat(It.IsAny<string>(), It.IsAny<object>()));
考えてみると、どちらにもたくさんのオーバーロードがあり、いずれかのオーバーロードが呼び出されてもかまいません (これが良いテストであることに疑いを持ち始めています)。
前もって感謝します。
編集:私は厄介なことを考えました:
try
{
logMock.Verify(log => log.Error(It.IsAny<object>()));
}
catch (Moq.MockException ex)
{
logMock.Verify(log => log.ErrorFormat(It.IsAny<string>(), It.IsAny<object>()));
}
多分私はある種の拡張メソッドでこれをラップすることができます...例えばVerifyAny
.