我如何告诉 Moq 返回任务?

2023-12-06

我有一个接口声明

Task DoSomethingAsync();

我使用 Moq 框架进行测试:

[TestMethod()]
public async Task MyAsyncTest()
{
   Mock<ISomeInterface> mock = new Mock<ISomeInterface>();
   mock.Setup(arg => arg.DoSomethingAsync()).Callback(() => { <my code here> });
   ...
}

然后在我的测试中我执行调用的代码await DoSomethingAsync()。测试就在那条线上失败了。我究竟做错了什么?


您的方法没有任何回调,因此没有理由使用.CallBack()。您可以使用以下命令简单地返回具有所需值的任务.Returns() and 任务.FromResult, e.g.:

MyType someValue=...;
mock.Setup(arg=>arg.DoSomethingAsync())        
    .Returns(Task.FromResult(someValue));

更新2014-06-22

Moq 4.2 有两种新的扩展方法来帮助实现这一点。

mock.Setup(arg=>arg.DoSomethingAsync())
    .ReturnsAsync(someValue);

mock.Setup(arg=>arg.DoSomethingAsync())        
    .ThrowsAsync(new InvalidOperationException());

更新2016-05-05

正如赛斯·弗劳尔斯 (Seth Flowers) 在其他答案, ReturnsAsync仅适用于返回 a 的方法Task<T>。对于仅返回任务的方法,

.Returns(Task.FromResult(default(object)))

可以使用。

如图所示这个答案,在 .NET 4.6 中这被简化为.Returns(Task.CompletedTask);, e.g.:

mock.Setup(arg=>arg.DoSomethingAsync())        
    .Returns(Task.CompletedTask);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我如何告诉 Moq 返回任务? 的相关文章

随机推荐

  • 如何使用反应嵌入菜单循环

    我正在尝试做什么 学习为我的discord py 机器人制作一个合适的帮助菜单ctx message author根据给出的反应对消息做出反应 机器人会检查他们是否已做出反应 然后编辑消息 如果ctx message author如果不反应
  • 将“Position:fixed”div设置为与父div(flexbox项)相同的宽度

    如何使 NavWrapper 与父级的宽度相同 我希望这些链接位于固定位置 即使主要部分溢出 我知道如何在没有 Flex 的情况下做到这一点 有没有纯 CSS 的方法可以做到这一点 body padding 0 margin 0 wrapp
  • 如何从 $.getJSON 函数返回变量

    我想回来StudentId在其他地方使用scope of the getJSON j getJSON url data function result var studentId result Something use studentId
  • 如何使用libsvm进行文本分类?

    我想用 SVM 编写一个垃圾邮件过滤器程序 我选择 libsvm 作为工具 我收到了 1000 封好指甲和 1000 封垃圾邮件 然后我将它们分类为 700 封 good train 邮件 700 封 spam train 邮件300 封
  • 使用密度图对特定区域进行着色 - ggplot2

    我有一个关于数据可视化的问题ggplot2 我试图弄清楚如何在密度图中遮蔽特定区域 我用谷歌搜索了很多 并尝试了所有解决方案 我的代码是 original 12 lt data frame sum rnorm 100 30 5 sex c
  • 使用 PHP CLI 执行路由(控制器/操作)并检测 CLI 请求

    Laravel 4 中有没有办法使用 PHP CLI 运行我的控制器 操作 如果请求来自 CLI 我想扩展一个控制器 操作来执行替代操作 那么有没有办法将该请求识别为 CLI 请求 Laravel 文档这个网站似乎表明有一个方法 Reque
  • 下面的宏可能会给应用程序带来什么问题?

    下面的宏会带来问题吗 define sq x x x 如果是 那么如何以及为什么 请帮忙 是的 它可能会带来问题 除了宏根本不尊重命名空间这个明显的事实 这意味着你不能调用其他任何东西 sq 请尝试以下操作 int result sq 4
  • 如何开始使用 Skobbler 跟踪 POI

    这是我用于创建可跟踪 POI 并启动 POI 跟踪的代码 该代码放置在我计算路线并开始导航之前 void createTrackablePOIs Go through the route array and create POIs out
  • 针对大动态响应进行断言

    我有一个非常大的响应数组 我想对其进行断言 但不知道顺序 我有一个具有预期响应值的变量 因此我可以进行一次巨大的比较 但我无法加载整个响应并同时将其与整个预期响应变量进行比较 def obligationsQuery Java type t
  • 与“iPad 2”失去连接

    我已经停止了所有模拟器进程 但仍然出现以下错误 恢复与 iPad 2 的连接并再次运行 APPNAME 或者如果 APPNAME 仍在运行 您可以通过选择 调试 gt 附加到进程 gt APPNAME 来附加到它 在 Xcode 6 中出现
  • 将位序列传递给文件 python

    作为较大项目的一部分 我想在文件中保存一系列位 以使文件尽可能小 我不是在谈论压缩 我想按原样保存序列 但使用最少的字符 最初的想法是使用 ASCII 编码将 8 位的迷你序列转换为字符并保存这些字符 但由于一些未知的奇怪字符问题 读取文件
  • 如何创建文本通道

    最近我一直在制作一个不和谐的机器人 我想在玩家输入命令后创建一个频道 gt report Tag Reason 以下是我尝试过的两种方法 其中一种来自之前的 StackOverflow 问题 但对我不起作用 function makeCha
  • MVC2.0中捕获HTML到字符串

    我是 MVC2 0 的新手 我使用下面的代码捕获 HTML 并将其作为字符串返回 但这在 MVC1 0 和 NET 3 5 框架中工作得很好 最近我将代码升级到 NET 4 0和MVC 2 0 现在这不再起作用并且上下文返回 null 当我
  • 没有“Access-Control-Allow-Origin”:读取 CSV、D3 [重复]

    这个问题在这里已经有答案了 我正在尝试从源读取 csvhttps stats oecd org Index aspx DataSetCode WILD LIFE 令 x 为上面的 url 但是 当我在本地主机上运行此脚本时 我收到以下消息
  • 调试 Android RuntimeException - 在我的代码执行之前

    我对 Java 并不陌生 但对 Android 平台却很陌生 我发现平台的缺点之一是对运行时崩溃的有意义的反馈 在应用断点的用户代码中很好 但我在第一次运行时发生崩溃 导致我的项目无法启动 并且我看不到追踪它的方法 任何人都可以阐明吗 Da
  • 应用程序特定信息:应用程序未能及时启动(iOS)?

    这是我的一份崩溃报告的顶部 Apple 是否规定了应用程序启动超时限制 如果是这样 有什么常见的解决方法吗 Elapsed total CPU time seconds 13 700 user 8 580 system 5 120 67 C
  • 在android中对字符串数组列表进行排序[重复]

    这个问题在这里已经有答案了 我有一个名为的字符串数组列表names 如何按字母顺序对数组列表进行排序 ArrayList
  • 如何添加对 .NET MySQL 连接器的引用?

    这是什么意思 接下来添加对 MySql Data 的引用 实际上我已经下载了mysql连接器 net 请按照以下说明操作 首先 您需要安装mysql连接器 net 它位于 http dev mysql com downloads conne
  • 如何从 .net 中的框架外的 Webbrowser 控件检索 HTML (c#)

    我知道我可以通过以下方式获取 Webbrowser 控件的 HTML 源代码 HtmlDocument htmldoc webBrowser1 Document 但这只提供了 父页面 的html代码 如果网页使用框架 则不会返回包括框架在内
  • 我如何告诉 Moq 返回任务?

    我有一个接口声明 Task DoSomethingAsync 我使用 Moq 框架进行测试 TestMethod public async Task MyAsyncTest Mock