【发布时间】:2018-09-27 09:15:19
【问题描述】:
我有一个模拟设置:
_mock.Setup( x => x.Method( It.IsAny<Model>(), It.IsAny<string>(), IsAny<int>()));
并通过以下方式验证:
_mock.Verify(x => x.Method( It.Is<Model>( p=> p.IsPresent && p.Search.Equals("term")), It.IsAny<string>(), It.IsAny<int>()), Times.Once());
public Results GetResults( Model model, string s, int i)
{
return _repo.Method(model, s, i);
}
在测试期间,该方法被调用两次。一次使用 Search == "rubbish",一次使用 Search=="term"。然而验证失败,消息被调用了 2 次。
我虽然在重要参数上使用 It.Is 应该给出正确的“Once”。有什么想法吗?
【问题讨论】:
-
特定参数的验证看起来没问题,但是设置和验证中的参数数量不匹配 - 这是问题还是错字?
-
感谢 Lennart,错字。现已修复。
-
@Craig 你能展示被测方法吗?
-
上面添加的方法
-
Setup行是多余的,可以删除。Verify的错误告诉您,该模拟上的方法没有使用所描述的参数调用。但正如 Nkosi 所说,如果没有 MCVE,那将是猜测。使用 MCVE 会更容易诊断。
标签: c# .net unit-testing moq