单元测试异步操作

2024-04-02

我想对执行异步操作的方法进行单元测试:

 Task.Factory.StartNew(() =>
        {
            // method to test and return value
            var result = LongRunningOperation();
        });

我在单元测试(用 c# 编写)中存根必要的方法等,但问题是在断言测试之前异步操作尚未完成。

我该如何解决这个问题?我应该创建 TaskFactory 的模拟还是任何其他提示来对异步操作进行单元测试?


你必须有某种方法来伪造任务的创建。

如果您移动了Task.Factory.StartNew调用一些依赖项(ILongRunningOperationStarter)那么你可以创建一个使用的替代实现TaskCompletionSource创建完全按照您希望的方式完成的任务。

它可能会有点毛茸茸的,但它can做完了。我在博客上谈到了这一点 https://codeblog.jonskeet.uk/2011/11/25/eduasync-part-17-unit-testing/不久前 - 对一种方法进行单元测试received任务开始,这当然让事情变得更容易。这是在 C# 5 中的 async/await 上下文中,但适用相同的原则。

如果您不想伪造整个任务创建过程,您可以替换任务工厂,并以这种方式控制时间 - 但老实说,我怀疑这会更加棘手。

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

单元测试异步操作 的相关文章

  • WCF RIA 服务 - 加载多个实体

    我正在寻找一种模式来解决以下问题 我认为这很常见 我正在使用 WCF RIA 服务在初始加载时将多个实体返回给客户端 我希望两个实体异步加载 以免锁定 UI 并且我想利用 RIA 服务来执行此操作 我的解决方案如下 似乎有效 这种方法会遇到
  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • 秒表有最长运行时间吗?

    多久可以Stopwatch在 NET 中运行 如果达到该限制 它会回绕到负数还是从 0 重新开始 Stopwatch Elapsed返回一个TimeSpan From MSDN https learn microsoft com en us
  • 嵌套接口:将 IDictionary> 转换为 IDictionary>?

    我认为投射一个相当简单IDictionary
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • OleDbDataAdapter 未填充所有行

    嘿 我正在使用 DataAdapter 读取 Excel 文件并用该数据填充数据表 这是我的查询和连接字符串 private string Query SELECT FROM Sheet1 private string ConnectStr
  • 不同枚举类型的范围和可转换性

    在什么条件下可以从一种枚举类型转换为另一种枚举类型 让我们考虑以下代码 include
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • 从数据库检查数据的异步解决方案各种循环子句

    我想要做的是异步检查数据库并从中获取结果 在我的应用程序中我试图实现Asynchronously将此步骤解决为 从数据库中检查手机号码JsonArray循环子句的种类 Create JsonArray从结果 打印创建的数组 我学到了足够多的
  • 如何序列化/反序列化自定义数据集

    我有一个 winforms 应用程序 它使用强类型的自定义数据集来保存数据进行处理 它由数据库中的数据填充 我有一个用户控件 它接受任何自定义数据集并在数据网格中显示内容 这用于测试和调试 为了使控件可重用 我将自定义数据集视为普通的 Sy
  • 垃圾收集器是否在单独的进程中运行?

    垃圾收集器是否在单独的进程中启动 例如 如果我们尝试测量某段代码所花费的进程时间 并且在此期间垃圾收集器开始收集 它会在新进程上启动还是在同一进程中启动 它的工作原理如下吗 Code Process 1 gt Garbage Collect
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 如何从两个不同的项目中获取文件夹的相对路径

    我有两个项目和一个共享库 用于从此文件夹加载图像 C MainProject Project1 Images 项目1的文件夹 C MainProject Project1 Files Bin x86 Debug 其中有project1 ex
  • 通过指向其基址的指针删除 POD 对象是否安全?

    事实上 我正在考虑那些微不足道的可破坏物体 而不仅仅是POD http en wikipedia org wiki Plain old data structure 我不确定 POD 是否可以有基类 当我读到这个解释时is triviall
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定

随机推荐

  • 与 libbluetooth.so 链接

    在 Ubuntu 14 04 上 我尝试做一个蓝牙设备列表的小示例 但在编译这个简约演示时 我遇到了一个关于与蓝牙共享库链接的简单问题http people csail mit edu albert bluez intro c404 htm
  • 具有边框半径和线性渐变的 CSS 过渡

    鉴于我的 CodePenhttps codepen io scottmgerstl pen MpMeBy https codepen io scottmgerstl pen MpMeBy这是我有问题的图像布局 span class prof
  • 根据事件日志触发powershell

    我有一个用 PowerShell 编写的命令行参数脚本 它接受来自任务计划程序的服务器名称 然而 我的要求是在 SQL 服务器重新启动时执行脚本 因此我已将 PowerShell 脚本附加到事件 17069 但我无法动态传递事件源 在本例中
  • 如何设置 hibernate-mapping 以允许长度超过 255 个字符的字符串?

    所以我试图通过创建一个博客引擎来学习 我正在使用 Hibernate 和 MySQL 这是我的 Post 类的休眠映射
  • JoptionPane 显示确认对话框

    我有一个Java程序 当我运行该程序时 它会给我一个 GUI 如我所附 当我想关闭它时 它会弹出一个确认对话框 如果我按 是 按钮 它将使用以下命令退出程序System exit public static void main String
  • 如何对列表进行排序,其中正值位于负值之前,并且值分别排序?

    我有一个包含正数和负数混合的列表 如下所示 lst 1 2 10 12 4 5 9 2 我想要完成的任务是对列表进行排序 其中正数位于负数之前 也分别排序 期望的输出 1 2 9 10 12 5 4 2 我能够计算出第一部分的排序 其中正数
  • 将具有相同键的节点添加到属性树中

    我正在使用 Boost 的属性树来读取和写入 XML 使用我制作的电子表格应用程序 我想将电子表格的内容保存到 xml 这是一项学校作业 因此我需要使用以下 XML 格式
  • Swift 版本构建配置

    在 Swift v4 2 中 他们引入了扩展Bool toggle 我从早些时候就有了这个扩展 现在当我用 Xcode10 编译时它说Ambiguous use of toggle 如果 Swift 版本是 4 2 或更高版本 我试图让它忽
  • iOS 8 UIView 在键盘出现时不向上移动

    我正在开发一个聊天应用程序 其中有UITableView and a UIView含有一个UITextField and a UIButton在里面 我正在使用以下代码来移动UIView当键盘出现时向上 void keyboardWillS
  • Spring Security Saml 和 SP 应用程序的无状态会话

    我尝试运行启动示例 spring security saml boot https github com vdeotaris spring boot security saml sample https github com vdenota
  • 以编程方式完成 TFS Pull 请求

    使用Microsoft TeamFoundationServer Client 15 112 1 连接到TFS 2017 更新 2服务器我们可以获取有关现有 PR 的详细信息 如下所示 var connection new VssConne
  • 仅针对一个框架的 MSBuild 目标

    我有一个具有多框架目标的项目
  • 不安全的 JavaScript 尝试使用 URL 启动框架导航

    这有点复杂 请耐心等待 网站 A 有一个包含网站 B 的 iframe 网站 B 有一个包含网站 C 的 iframe 网站 C 上有一个按钮 单击后 我想刷新网站 B 的 url 下面是调用的 javascript 用于从网站 C 刷新网
  • 多线程 Objective-C 访问器:GCD 与锁

    我正在争论是否要转向基于 GCD 的多线程访问器模式 多年来我一直在访问器中使用基于自定义锁的同步 但我发现了一些信息 GCD简介 http www mikeash com pyblog friday qa 2009 08 28 intro
  • 如何删除 jQuery Mobile 样式?

    我之所以选择 jQuery Mobile 是因为它的动画功能和动态页面支持 而不是其他框架 然而 我在造型方面遇到了麻烦 我想保留基本页面样式以便执行页面转换 但我还需要完全自定义标题 列表视图 按钮 搜索框的外观 仅处理颜色是不够的 我需
  • Jetty + intellij idea :: 添加库

    I get java lang NoClassDefFoundError当我将 3d party 库添加到我的项目中时 我尝试将库添加到 web inf 模块依赖项 服务器库 但它不起作用 使用jetty和idea将库添加到项目的正确方法是
  • Gradle:应用程序和测试应用程序的已解决版本不同

    当我添加依赖项时 compile net bytebuddy byte buddy android 0 7 8 在我的应用程序中 我收到此错误 Conflict with dependency net bytebuddy byte budd
  • SQL 条件排序依据

    我正在两个表上进行连接 一个是用户表 另一个是高级用户列表 我需要让高级会员首先出现在我的查询中 然而 仅仅因为他们位于高级用户表中并不意味着他们仍然是高级会员 还有一个 IsActive 字段也需要检查 所以基本上我需要按以下顺序返回结果
  • 我正在尝试从某个检查点 (Tensorflow) 恢复训练,因为我正在使用 Colab 并且 12 小时还不够

    这是我正在使用的代码的一部分 checkpoint dir training checkpoints1 checkpoint prefix os path join checkpoint dir ckpt checkpoint tf tra
  • 单元测试异步操作

    我想对执行异步操作的方法进行单元测试 Task Factory StartNew gt method to test and return value var result LongRunningOperation 我在单元测试 用 c 编