【发布时间】:2012-01-27 21:04:58
【问题描述】:
使用 Microsoft 测试框架和 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());
}
我在验证调用时遇到异常
预计至少会在模拟上调用一次,但从来没有 执行:moqLog => moqLog.Info("do stuff got called") 无设置 配置。未执行任何调用。
我做错了什么?
更新问题出在 SampleClas.Log 属性的 getter 上。即使该属性已设置为 ILogProxy,我也总是返回 LogManager.GetLogger(...);。我的印象是不会调用该属性的 get 访问器,因为我已经设置了像这样的代理 sampleObject.Log = logMockObject.Object;
【问题讨论】:
-
“do stuff got called”是传递给 .Info 的确切字符串吗?
-
sampleObject.DoStuffAndLogInfo()是做什么的? -
不。参数重要吗?我认为参数无关紧要,只要你传递一些东西给它。
-
@MichaelLiu 它调用 Log.Info 其中 Log 是 log4net 的 ILog 实例
-
是的,参数很重要。如果您只是想测试它是否被任何字符串调用,请使用
It.IsAny<string>()作为参数。