当我ReturnsAsync(null)
在Visual Studio(with Moq
)中使用C#单元测试方法时,我收到错误:
"以下方法或属性之间的调用不明确"
然后是ReturnsAsync
具有不同参数的方法列表.我知道这是由于ReturnsAsync
函数被重载.但是,当我在同事的计算机上运行相同的单元测试时,它运行没有任何错误.有谁知道为什么会这样?有谁知道如何解决这一问题?
此外,当我建立时,我收到警告:
所有引用********的软件包都必须安装nuget软件包Microsoft.Bcl.Build.
这会有什么影响吗?
ReturnsAsync
Moq类有两种扩展方法ReturnsExtensions
.它们有以下参数:
(this IReturns> mock, TResult value) (this IReturns > mock, Func valueFunction)
正如您所看到的那样,一个接受应该由task返回的值,而另一个接受将返回值的委托.当你传递null
编译器时,不知道它是值还是委托.当task参数是值类型(例如int)时,情况并非如此.因为它不能为null并且编译器理解null是委托.你的同事的电脑可能就是这种情况.
要修复此错误,您需要帮助编译器选择正确的方法重载 - 将null转换为任务结果的类型(例如字符串):
RetursAsync((string)null)
或者您可以传递null值
string s = null; ... ReturnsAsync(s);