使用Microsoft Test Framework和Moq我正在尝试验证是否调用了log4net方法.
[TestMethod()]
public void Log_Info_When_Stuff_Is_Done()
{
SampleClass sampleObject = new SampleClass();
Mock<log4net.ILog> logMockObject = new Mock<log4net.ILog>();
sampleObject.Log = logMockObject.Object;
sampleObject.DoStuffAndLogInfo();
logMockObject.Verify(moqLog => moqLog.Info("do stuff got called"), Times.AtLeastOnce());
}
Run Code Online (Sandbox Code Playgroud)
我在Verify调用中得到一个例外
模拟上的预期调用至少一次,但从未执行过:moqLog => moqLog.Info("do stuff got called")未配置任何设置.没有进行任何调用.
我究竟做错了什么?
更新问题是使用SampleClas.Log属性的getter.LogManager.GetLogger(...);即使属性已经设置为ILogProxy,我也总是返回.我的印象是,我不会调用属性的get访问器,因为我已经设置了这样的代理 sampleObject.Log = logMockObject.Object;
Mic*_*Liu 34
现在起订量验证DoStuffAndLogInfo调用Info与实际字符串 "做的东西得到了被称为".如果它实际上Info使用不同的参数调用,并且您不关心实际参数是什么,请使用以下代码:
logMockObject.Verify(moqLog => moqLog.Info(It.IsAny<string>()), Times.AtLeastOnce());
Run Code Online (Sandbox Code Playgroud)