如何对这个(正确)抛出异常的异步方法进行单元测试?

2024-04-12

我在界面中有以下方法..

Task<SearchResult<T>> SearchAsync(TU searchOptions);

效果很好。

现在我正在尝试进行单元测试来测试何时出现问题 - 并且代码会引发异常。

在这种情况下,我已经设置了抛出一个方法HttpRequestException。我的单元测试未能表明我抛出了该异常..

var result = Should.Throw<HttpRequestException>
    (async () => await service.SearchAsync(searchOptions));

单元测试的错误消息是

应该.ChuckedAWobbly
var 结果 = 应该

System.Net.Http.HttpRequestException
但不

So the 断言框架 http://shouldly.github.io/是说:您预计会出现异常,但没有抛出任何异常。

当我单步执行代码时,100% 抛出异常。

任何人都可以看到我的单元测试代码做错了什么吗?


问题是您的断言框架不理解异步方法。我建议您向他们提出问题。

在此期间,您可以使用来源Should.Throw https://github.com/shouldly/shouldly/blob/master/src/Shouldly/ShouldThrowExtensions.cs自己写MyShould.ThrowAsync:

public static async Task<TException> ThrowAsync<TException>(Func<Task> actual)
    where TException : Exception
{
  try
  {
    await actual();
  }
  catch (TException e)
  {
    return e;
  }
  catch (Exception e)
  {
    throw new ChuckedAWobbly(new ShouldlyMessage(typeof(TException), e.GetType()).ToString());
  }

  throw new ChuckedAWobbly(new ShouldlyMessage(typeof(TException)).ToString());
}

并像这样使用它:

var result = await MyShould.ThrowAsync<HttpRequestException>
    (async () => await service.SearchAsync(searchOptions));

或稍微简单且等效的:

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

如何对这个(正确)抛出异常的异步方法进行单元测试? 的相关文章

  • XPATH 查询、HtmlAgilityPack 和提取文本

    我一直在尝试从名为 tim new 的类中提取链接 我也得到了解决方案 给出了解决方案 片段和必要的信息here https stackoverflow com questions 2982862 extracting a table ro
  • 将设置函数(setter)标记为 constexpr 的目的是什么? [复制]

    这个问题在这里已经有答案了 我无法理解将 setter 函数标记为的目的constexpr 自 C 14 起这是允许的 我的误解来自以下情况 我使用 constexpr c tor 声明一个类 并且我将通过创建该类的 constexpr 实
  • 在 ASP.NET MVC 中将模型从视图传递到控制器

    我正在 ASP NET MVC 中开发我的第一个应用程序 但遇到了一个我无法解决的问题 即使在阅读了整个互联网之后也是如此 因此 我有几个使用视图模型创建的视图 它们是报告 这些视图模型是根据用户选择标准填充的 我正在尝试构建一种接受模型并
  • 全局使用和 .NET Standard 2.0

    我最近意识到我可以使用 C 10 功能文件范围的命名空间在 NET Standard 2 0 项目中也可以通过设置
  • 带有运算符语法的错误消息,但不带有函数语法的错误消息

    为什么我在调用 unary 时收到错误消息 使用运算符语法 如果我用函数语法调用它就可以了 现场演示 https godbolt org z j7AbeQ template
  • while循环中的变量初始化

    我有一个可以分块读取文件的函数 public static DataObject ReadNextFile 数据对象看起来像这样 public DataObject public string Category get set And ot
  • pytest:同一接口的不同实现的可重用测试

    想象一下我已经实现了一个名为的实用程序 可能是一个类 Bar在一个模块中foo 并为其编写了以下测试 测试 foo py from foo import Bar as Implementation from pytest import ma
  • 单元测试、集成测试还是设计中的问题?

    我编写了我的第一个单元测试 我认为它过于依赖其他模块 我不确定是否是因为 这是一个复杂的测试 我实际上已经编写了集成测试或 我的设计有问题 我首先要说的是 虽然我有大约 4 年的开发经验 但我从未学过 也没有人教过自动化测试 我刚刚使用 H
  • 静态类与类的实例

    我有一个静态类 用于访问我的公共属性 整个应用程序的全局属性 和我在应用程序运行期间使用的方法 例如 我在静态类中设置了一些属性 并且在应用程序运行时我可以从属性中获取值 但我可以使用单例模式创建非静态类并以相同的方式使用它 问题 对于我的
  • 如何在win32中使用GetSaveFileName保存文件?

    我编写此代码是为了获取 fileName 来保存我的文件 include stdafx h include
  • 你好,我最近正在开发我的新游戏,我遇到了*无限跳跃*的问题

    所以基本上当我按跳跃 空格键时我会跳跃但是如果我连续按空格键它 只是跳啊跳啊跳等等 我不想要我只想它跳一次 code if Input GetKeyDown space isGrounded velocity y Mathf Sqrt ju
  • 通过 C# Mailkit / Mimekit 发送电子邮件,但出现服务器证书错误

    Visual Studio 2015 中的 0 代码 1 我正在使用 Mailkit 最新版本 1 18 1 1 从我自己的电子邮件服务器发送电子邮件 2 电子邮件服务器具有不受信任的自签名证书 3 我在代码中添加了以下两行 以忽略服务器证
  • 子目录中的头文件(例如 gtk/gtk.h 与 gtk-2.0/gtk/gtk.h)

    我正在尝试使用 GTK 构建一个 hello world 其中包括以下行 include
  • C++ 到 C# 事件处理

    所以我有我的C WinForm 应用程序 我从中调用我的C CLI MFC dll图书馆 但也有一些events在我的 C 库上 甚至此事件也发生在该库的本机 非 CLI 部分 我需要从我的 C 应用程序调用一些代码 并获取一些有关此事件的
  • 使用多线程进行矩阵乘法?

    我应该使用线程将两个矩阵相乘 有两件事 当我运行程序时 我不断得到 0 我还收到消息错误 对于每个错误 它在粗体行上显示 警告 从不兼容的指针类型传递 printMatrix 的参数1 我尝试打印输出 还要注意 第一个粗体块 这是我解决问题
  • ALTER TABLE ... ADD CONSTRAINT 失败时将事务回滚到保存点

    有没有办法在事务中添加检查约束and如果失败回滚到以前的保存点 而不是回滚整个事务 就我而言 当 ALTER TABLE ADD CONSTRAINT 命令失败时 事务无法回滚到保存点 尝试这样做会引发 InvalidOperationEx
  • 浮点字节序?

    我正在为实时海上模拟器编写客户端和服务器 并且由于我必须通过套接字发送大量数据 因此我使用二进制数据来最大化可以发送的数据量 我已经了解整数字节顺序以及如何使用htonl and ntohl为了规避字节顺序问题 但我的应用程序与几乎所有模拟
  • 在哪里可以下载没有 Visual Studio 2010 的 C# 4.0 编译器?

    我知道 CTP VS 2010 映像 但我可以只下载 NET Framework 4 0 和 C 编译器吗 AFAIK VS 2010 CTP 仅作为 VM 映像提供 我不相信 Microsoft 发布了 VS 的安装程序 其中一个绝对不适
  • 使用 C# 动态创建按钮并按预定义的顺序放置它们

    NET 4 5 C 创建 Windows 窗体 我想动态创建和添加按钮并为其分配单击事件 但希望它们以特定的方式动态放置 就像图像一样 我的问题是如何以上述方式动态放置按钮 即 4x4 格式 一行 4 个按钮 4 列 但行数不受限制 是否可
  • SQL Server“未找到网络路径”在不同环境中随机且不频繁地发生

    类似 如果不是同一个问题 随机遇到网络路径未找到异常 https stackoverflow com questions 38696448 network path not found exception encountered rando

随机推荐

  • 使用 CLI 时如何将 Java 类添加到 Worklight 适配器

    我正在尝试将 Java 类添加到我的适配器 如教程中所述在适配器中使用 Java http public dhe ibm com software mobile solutions worklight docs v620 04 12 Usi
  • 当鼠标悬停在放置目标上时如何更改拖放光标

    我有一个应用程序 其中包含一个取消归档 文件属性 文件的放置目标 我想将表单的 DragEnter 事件中的鼠标光标更改为我作为嵌入资源的自定义光标 cur 放置目标是带有目标图像的透明形式 整个表格是放置目标 我知道当我控制拖动源时可以使
  • 通过 AJAX 将动态字段添加到嵌套表单

    我一直在我的应用程序上观看和重现这些轨道广播 196 嵌套模型表单第 1 部分 http railscasts com episodes 196 nested model form part 1 and 197 嵌套模型形式 第 2 部分
  • 如何在 R 中堆叠数据框[重复]

    这个问题在这里已经有答案了 我有一个数据框 我想将其堆叠在 R 中 这样我最终会得到三列 下面是当前格式的一些示例数据 gt dput df structure list Day c d1 d2 d3 d4 d5 d6 d7 d8 d9 d
  • 使用 Java 代理将类添加到类路径

    我正在使用 Java Agent 和 Javassist 向某些 JDK 类添加一些日志记录 本质上 当系统加载一些 TLS 类时 Javassist 会向它们添加一些额外的字节码 以帮助我调试一些连接问题 考虑到此类包含在代理 jar 中
  • “poly()”如何生成正交多项式?如何理解返回的“coefs”?

    我对正交多项式的理解是它们采用以下形式 y x a1 a2 x c1 a3 x c2 x c3 a4 x c4 x c5 x c6 最多达到所需的术语数 where a1 a2 etc是每个正交项的系数 拟合之间有所不同 并且c1 c2 e
  • vim - 从 vim 撤消文件恢复丢失的文件

    我不小心删除了 vimrc 这花了我几周的时间来配置 我仍然保留撤消文件 我认为这是恢复它的唯一方法 不幸的是 vim 现在不允许我撤消 我猜是因为我当前的 vimrc 版本无法使用最后一个撤消步骤 修补 另外 vim 撤消文件是经过编码的
  • 如何在最后一个单元格上启动 UITableView?

    在Apple的消息应用程序中 当您单击通讯员的姓名并切换到对话的表格视图 每条消息都有气球 时 表格会一直滚动到最后 没有动画或任何东西 它就在那里 同样 在 Tweetie 2 中 当您加载推文视图时 它会出现在您上次查看的位置 没有动画
  • 检查列表是否包含类型?

    检查列表中是否存在某种类型的最快方法是什么 我希望我能做到以下几点 class Generic object def class SubclassOne Generic def class SubclassOne Generic def t
  • 如何处理 MVC 中的页面流(特别是 asp.net)

    如果您必须在 mvc 中提供类似于表单输入体验的向导 您将如何抽象页面流 研究重定向后获取模式 http weblogs asp net mhawley archive tags MVC default aspx http weblogs
  • sql 按日期分组,不带时间

    我是 sql 新手 我想创建一个查询来计算我每天的所有文章 ID 但问题是日期列也包含时间 那么我如何才能使查询仅按日期分组而无需时间 例如 id article id date timestamp 1 22 2014 01 10 13 3
  • GIT 不跟踪文件

    我已经在 AIX 6 1 上设置了 GIT 但遇到了问题 我遵循的步骤顺序如下所示 我创建一个文件夹 进入文件夹并初始化非裸存储库 初始化用户名和用户电子邮件 创建一个名为index html 的文件 并在该文件中包含一些数据 创建一个名为
  • 对小数的最快素数测试

    我在业余时间玩了 Euler 项目 现在我需要做一些重构 我已经实施了 Miller Rabin 以及一些筛子 我以前听说过 对于较小的数量 例如数百万以下 筛子实际上更快 有人有这方面的信息吗 谷歌并没有多大帮助 Yes you ll f
  • Tensorflow动态RNN(LSTM):如何格式化输入?

    我已获得这种格式的一些数据以及以下详细信息 person1 day1 feature1 feature2 featureN label person1 day2 feature1 feature2 featureN label person
  • 设置非 Office 文件的 Windows 文件属性

    我想在 NET 代码中设置文件的属性 我尝试过使用 DSOFile v2 1 如下所示 var properties new OleDocumentProperties try properties Open filePath proper
  • java中如何从字符串中提取子字符串

    亲爱的大家 我有一个像这样的字符串 1name john 2name lice 3name mike 我想输出它的子字符串 1name john 它在字符串中的位置不固定 我也使用子字符串方法但无法获取它 那么你能帮我一个忙吗 谢谢 Str
  • C# - 静态类型不能用作类型参数

    我有一个通用类可以帮助我检查参数值 internal sealed class Argument
  • Eclipse - 当涉及 Maven 时“作为 Java 应用程序运行”

    我有一个 Maven 项目 作为activeByDefault我有生产资料 看来我找不到使用临时配置文件在 Eclipse 中将其作为应用程序运行的方法 除非我将activeByDefault在暂存配置文件中 有没有办法配置这个 这样我就不
  • IE 脚本和通知设置之间的差异

    这些 IE 设置之间有什么区别 Disable script debugging Internet Explorer Disable script debugging Other Display a notification about e
  • 如何对这个(正确)抛出异常的异步方法进行单元测试?

    我在界面中有以下方法 Task