我正在使用 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
。