【发布时间】:2019-02-14 08:14:46
【问题描述】:
我有一个调用 MyClass 模拟的测试类,我之前有 Setup 和 DoStuffA 和 DoStuffB。
我尝试将多个 Verify 调用包装在一个方法中,如下所示:
void VerifyMany(int input)
{
_myClassMock.Verify(ic => ic.DoStuffA(input), Times.Once());
_myClassMock.Verify(ic => ic.DoStuffB(input), Times.Once());
}
如果我使用 It.IsAny<int>() 作为输入调用我的方法 - VerifyMany(It.IsAny<int>()) - 我的测试没有通过,但是如果我直接使用 It.IsAny 调用 Verify 方法,它将起作用:
_myClassMock.Verify(ic => ic.DoStuffA(It.IsAny<int>()), Times.Once());
_myClassMock.Verify(ic => ic.DoStuffB(It.IsAny<int>()), Times.Once());
我从this 问题的回答中了解到,当指定为设置/验证时,Moq 在表达式中处理 It.IsAny 的方式不同,是否有任何解决方法?
【问题讨论】:
-
你能分享一下方法的调用吗?
-
为避免混淆,请在调用
VerifyMany之前声明您正在处理.Setup或在您的示例中提供它。看来,它“会”还是“不会”起作用并不是那么确定的。我对您在这里工作的尝试造成了困惑。 -
@BrettCaswell 添加了一些说明。
-
您实际链接的那个问题存在下划线问题.. 仅仅因为 It.IsAny
评估为 0 并不意味着它对于他的验证调用仍然不可行,而不是通过123 验证,OP 应该刚刚使用 myValue。如果您将一个变量传递到您的模拟中,那么您也应该使用该变量进行验证。