将 Moq.Times 与 ?: 运算符一起使用时出错

Error when using Moq.Times with ?: operator

我尝试使用 Moq 框架测试我的代码,我想验证我的方法是否在某些特殊情况下被调用。为此,我必须使用 Mock.Times。如果我使用 Times likes this 它可以正常工作。

MockObject.Verify(x => x.SomeMethod(), Times.Once)

但是因为我有很多方法可以检查所以我想这样使用它:

System.Func<Times> times = isItCalled ? Times.Once : Times.Never;
MockObject.Verify(x => x.SomeMethod(), times)

为此,我收到以下错误消息: 无法确定条件表达式的类型,因为 'method group' 和 'method group' 之间没有隐式转换。

这对我来说真的很奇怪,因为我认为这个运算符与以下运算符相同(也可以正常工作):

 System.Func<Times> times;
 if (isItCalled)
 {
    times = Times.Once;
 }
 else
 {
    times = Times.Never;
 }
 MockObject.Verify(x => x.SomeMethod(), times)

这是三元运算符的一个已知问题。

可能的解决方案:

Func<Times> times = isItCalled ? (Func<Times>)Times.Once : Times.Never;
MockObject.Verify(x => x.SomeMethod(), times);

或者:

// note the parentheses so you pass a Time instance instead of a delegate:
MockObject.Verify(x => x.SomeMethod(), isItCalled ? Times.Once() : Times.Never());