c# - Returnssasync(null) 在 VS15 中使用 Moq 进行单元测试时创建构建错误

标签 c# unit-testing asynchronous moq

当我在 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/

相关文章:

c# - 更改不同表单上的 TopMost 属性?

c# - Asp.net ConnectionString 以安全的方式

javascript - 如何在 Jest 测试函数中模拟变量?

ruby - 在 Ruby 中测试文件复制、移动、删除操作

javascript - 是否可以关注 'input' 标签,该标签是 'v-if' 呈现的元素的子元素?

unit-testing - Dart 单元测试应该在异常时失败

c# - Partcover 和 Typemock 集成

c# - 如何使用ffmpeg从视频文件中提取图像流

android - 测试rxjava回调函数

javascript - 如何选择一个事件监听器,让我等到 async.times 完成运行一个函数