当我在 Visual Studio 的 C# 单元测试方法中使用 ReturnsAsync(null)
时(使用 Moq
),出现错误:
"The call is ambiguous between the following methods or properties"
然后是具有不同参数的 ReturnsAsync
方法的列表。我知道这是由于 ReturnsAsync
函数被重载造成的。但是,当我在同事的计算机上运行相同的单元测试时,它运行没有任何错误。有谁知道为什么会这样?有谁知道如何解决这个问题?
此外,当我构建时,我收到以下警告:
all packages referencing ******** must install nuget package Microsoft.Bcl.Build.
这有什么影响吗?
最佳答案
在 Moq ReturnsExtensions
类中有两个 ReturnsAsync
扩展方法。它们具有以下参数:
(this IReturns<TMock, Task<TResult>> mock, TResult value)
(this IReturns<TMock, Task<TResult>> mock, Func<TResult> valueFunction)
如您所见,一个接受任务应返回的值,另一个接受将返回值的委托(delegate)。当您传递 null
时,编译器不知道它是值还是委托(delegate)。当任务参数是值类型(例如 int)时,情况并非如此。因为它不能为 null 并且编译器知道 null 是一个委托(delegate)。您同事的计算机可能就是这种情况。
要修复此错误,您需要帮助编译器选择正确的方法重载 - 将 null 转换为任务结果的类型(例如字符串):
RetursAsync((string)null)
或者你可以传递一个空值
string s = null;
... ReturnsAsync(s);
关于c# - Returnssasync(null) 在 VS15 中使用 Moq 进行单元测试时创建构建错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41636077/