Moq记录器&验证呼叫失败

时间:2018-03-22 09:26:10

标签: c# unit-testing mocking moq verify

我为记录器创建了一个模拟项目,以便我可以验证对它进行的调用;像这样:

  mock_log.Setup(l => l.InfoFormat(It.IsAny<string>(), It.IsAny<object[]>()));
  mock_log.Verify(m => m.InfoFormat("1 file(s) found that match criteria."), Times.Exactly(1));

我已经调试了代码,并且我知道这些日志在代码中受到严格限制,所以应该记录这些日志。这是记录该消息的代码

  _log.InfoFormat("{0} file(s) found that match criteria.", files.Count);

并且只有一个文件被传递下来。

那么为什么当我验证一个呼叫它失败了?  任何建议。

2 个答案:

答案 0 :(得分:2)

发现它是因为字符串封装不能通过。将验证更改为

 mock_log.Verify(m => m.InfoFormat("{0} file(s) found on Ftp server.", 4), Times.Exactly(1));

答案 1 :(得分:0)

在模拟设置中,您告诉记录器第二个参数是一个数组,但是您在运行时传入计数。我怀疑这会成为问题所在。尝试更改为:

It.IsAny<object>()

另一个想法,你正在申请的测试.Verify看起来有点奇怪。我不确定Times.Exactly(1)是什么意思,如果模拟试图运行验证结果格式字符串,你可能只想传入1?