将 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());
我尝试使用 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());