我有一个类的Moq模拟,我需要验证是否调用了某个方法。根据变量的类型,我需要检查方法是一次调用还是从不调用。
所以,这有效:
if (exception is ValidationException)
mockRequestHandler.Verify(x => x.HandleException(exception),
Times.Once);
else
mockRequestHandler.Verify(x => x.HandleException(exception),
Times.Never);
我尝试使用三元运算符如下,但它似乎不起作用:
mockRequestHandler.Verify(x => x.HandleException(exception),
(exception is ValidationException) ? Times.Once: Times.Never);
我收到以下编译时错误:
无法确定条件表达式的类型,因为'方法组'之间没有隐式转换。和'方法组'。
有什么简单的东西可以忽略,或者三元运算符不能以这种方式使用吗?
答案 0 :(得分:6)
正如我在this source file中看到的那样,Times.Once
和Times.Never
实际上是静态方法,而不是属性。
为了验证方法被调用一次或从未被调用过,您需要以这种方式使用它:
mockRequestHandler.Verify(x => x.HandleException(exception), Times.Once());
mockRequestHandler.Verify(x => x.HandleException(exception), Times.Never());
因此,使用三元运算符将是:
mockRequestHandler.Verify(x => x.HandleException(exception),
(exception is ValidationException) ? Times.Once() : Times.Never());