使用 XUnit 断言异常

2024-04-02

我是 XUnit 和 Moq 的新手。我有一个以字符串作为参数的方法。如何使用 XUnit 处理异常。

[Fact]
public void ProfileRepository_GetSettingsForUserIDWithInvalidArguments_ThrowsArgumentException() {
    //arrange
    ProfileRepository profiles = new ProfileRepository();
    //act
    var result = profiles.GetSettingsForUserID("");
    //assert
    //The below statement is not working as expected.
    Assert.Throws<ArgumentException>(() => profiles.GetSettingsForUserID(""));
}

测试方法

public IEnumerable<Setting> GetSettingsForUserID(string userid)
{            
    if (string.IsNullOrWhiteSpace(userid)) throw new ArgumentException("User Id Cannot be null");
    var s = profiles.Where(e => e.UserID == userid).SelectMany(e => e.Settings);
    return s;
}

The 断言.抛出 https://github.com/xunit/assert.xunit/blob/main/ExceptionAsserts.cs#L27表达式将捕获异常并断言类型。然而,您在断言表达式之外调用被测方法,从而导致测试用例失败。

[Fact]
public void ProfileRepository_GetSettingsForUserIDWithInvalidArguments_ThrowsArgumentException()
{
    //arrange
    ProfileRepository profiles = new ProfileRepository();
    // act & assert
    Assert.Throws<ArgumentException>(() => profiles.GetSettingsForUserID(""));
}

如果执意遵循 AAA,您可以将操作提取到其自己的变量中。

[Fact]
public void ProfileRepository_GetSettingsForUserIDWithInvalidArguments_ThrowsArgumentException()
{
    //arrange
    ProfileRepository profiles = new ProfileRepository();
    //act
    Action act = () => profiles.GetSettingsForUserID("");
    //assert
    ArgumentException exception = Assert.Throws<ArgumentException>(act);
    //The thrown exception can be used for even more detailed assertions.
    Assert.Equal("expected error message here", exception.Message);
}

请注意异常如何也可用于更详细的断言

如果异步测试,断言.ThrowsAsync https://github.com/xunit/assert.xunit/blob/main/ExceptionAsserts.cs#L70与前面给出的示例类似,但应等待断言,

public async Task Some_Async_Test() {

    //...

    //Act
    Func<Task> act = () => subject.SomeMethodAsync();

    //Assert
    var exception = await Assert.ThrowsAsync<InvalidOperationException>(act);

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

使用 XUnit 断言异常 的相关文章

  • 将集合绑定到自定义控件属性

    我没有运气尝试将数据集合绑定到我的自定义控件的属性 我已经实现了该控件的字符串属性的机制 在此处提供了一些帮助 并期望集合类型同样简单 但是我无法让它再次工作 这是我的自定义控件视图
  • 尚未注册类型“IServiceProviderFactory[Autofac.ContainerBuilder]”的服务

    当运行以下命令添加数据库迁移脚本时 出现以下错误 dotnet ef migrations add InitialCreate v o Migrations context MyContext 访问 Microsoft Extensions
  • 如何在 DataColumn.Expression 中使用 IF/ELSE 或 CASE?

    我有一个包含 1 列的表 状态 我想添加另一列名为 Action 的列 其值如下 如果 Status Yes 则 Action Go 否则 Action Stop 我使用以下代码添加到 操作 列中 但它不起作用 myDataTable Co
  • 有没有快速创建集合的方法?

    目前我正在创建一个像这样的新集 std set a s s insert a1 s insert a2 s insert a3 s insert a10 有没有办法创建s在一行 int myints 10 20 30 40 50 std s
  • QCombobox 向下箭头图像

    如何更改Qcombobox向下箭头图像 现在我正在使用这个 QSS 代码 但这不起作用 我无法删除向下箭头边框 QComboBox border 0px QComboBox down arrow border 0px background
  • 我如何理解这个 C 类型声明?

    double bar int double double double double 在查看讲座幻灯片时 我发现了留给学生的练习 用简单的英语来说 什么是类型bar在这个 C 声明中 Please帮助我解决这个问题 我什至不知道从哪里开始
  • 更改 Qt OpenGL 窗口示例以使用 OpenGL 3.3

    我正在尝试更改 Qt OpenGL 示例以使用更现代的 opengl 版本 330 似乎合适 所以我做了 在 main cpp 上设置版本和配置文件 设置着色器版本 更改着色器以使用统一 它现在构建没有任何错误 但我只看到一个空白窗口 我错
  • ASP.NET Web API 客户端 ProgressMessageHandler Post 任务卡在 WinForm 应用程序中

    我在用着HttpClient and ProgressMessageHandler来自MS ASP NET Web API 客户端库 http nuget org packages Microsoft AspNet WebApi Clien
  • vs2008 c#:Facebook.rest.api如何使用它来获取好友列表?

    如何在此基础上取得进一步的进步 获取好友列表的下一步是什么 string APIKey ConfigurationManager AppSettings API Key string APISecret ConfigurationManag
  • 为什么 set_symmetry_difference 无法与比较器一起使用?

    Example program include
  • C# 构建一个 webservice 方法,它接受 POST 方法,如 HttpWebRequest 方法

    我需要一个接受 POST 方法的 Web 服务 访问我的服务器正在使用 POST 方法 它向我发送了一个 xml 我应该用一些 xml 进行响应 另一方面 当我访问他时 我已经使用 HttpWebRequest 类进行了管理 并且工作正常
  • 如何从文本文件读取整数到数组

    这就是我想做的 我对此有些不满 但我希望你能容忍我 这对我来说是一个非常新的概念 1 在我的程序中 我希望创建一个包含 50 个整数的数组来保存来自文件的数据 我的程序必须获取用户的文档文件夹的路径 2 文件的名称为 grades txt
  • 检查 RoutedEvent 是否有任何处理程序

    我有一个自定义 Button 类 当单击它时 打开特定窗口 它总是执行相同的操作 我添加了一个可以在按钮的 XAML 中分配的 Click 事件 就像常规按钮一样 当它被单击时 我想执行 Click 事件处理程序 如果已分配 否则我想执行默
  • AES 输出是否小于输入?

    我想加密一个字符串并将其嵌入到 URL 中 因此我想确保加密的输出不大于输入 AES 是可行的方法吗 不可能创建任何始终会创建比输入更小的输出的算法 但可以将任何输出反转回输入 如果您允许 不大于输入 那么基本上您只是在谈论同构算法alwa
  • 将标量添加到特征矩阵(向量)

    我刚刚开始使用 Eigen 库 无法理解如何向所有矩阵成员添加标量值 假设我有一个矩阵 Eigen Matrix3Xf mtx Eigen Matrix3Xf Ones 3 4 mtx mtx 1 main cxx 104 13 error
  • 是否有相当于 Clang/LLVM 的 .spec 文件,在哪里可以找到参考?

    The gcc驱动程序可以配置为使用特定的链接器 特定的选项和其他细节 例如覆盖系统头 specs files 当前 截至撰写本文时 GCC 版本 4 9 0 的手册此处描述了规范文件 https gcc gnu org onlinedoc
  • 如何分析组合的 python 和 c 代码

    我有一个由多个 python 脚本组成的应用程序 其中一些脚本正在调用 C 代码 该应用程序现在的运行速度比以前慢得多 因此我想对其进行分析以查看问题所在 是否有工具 软件包或只是一种分析此类应用程序的方法 有一个工具可以将 python
  • 在 EnvDTE 中调试时捕获 VS 局部变量

    是否可以使用 EnvDTE 进行 vsix Visual Studio 扩展来捕获本地和调试窗口使用的调试数据 或者可以通过其他方法吗 我想创建一个自定义的本地窗口 我们可以修改它以根据需要显示一些较重的内容 而无需为高级用户牺牲原始的本地
  • 使用taskkill停止Windows服务

    我需要帮助来使用 C 终止 Windows 服务 现在要终止该服务 请使用以下选项 从命令 sc queryex ServiceName 发现后PID服务的 taskkill pid 1234 exemple f 为了便于阅读 但如果您明白
  • 更改 Windows Phone 系统托盘颜色

    有没有办法将 Windows Phone 上的系统托盘颜色从黑色更改为白色 我的应用程序有白色背景 所以我希望系统托盘也是白色的 您可以在页面 XAML 中执行此操作

随机推荐

  • 如果我们有 GIL,为什么我们还需要线程锁?

    我相信这是一个愚蠢的问题 但我仍然找不到它 其实最好分成两个问题 1 我是否正确 我们可以有很多线程 但由于 GIL 在某一时刻只有一个线程正在执行 2 如果是这样 为什么我们还需要锁 我们使用锁来避免两个线程尝试读 写某个共享对象的情况
  • Pandas 内部合并/连接返回所有行

    我试图根据两个数据帧中存在的列来合并两个数据帧 仅保留两个数据集的交集 期望的结果是 foo bar foobar x y z x j i x y z j i a 1 2 a 9 0 a 1 2 9 0 b 3 4 b 9 0 b 3 4
  • Android 语音识别服务在 <= Ice Cream Sandwich 上速度慢得多

    我有一个正在实现 RecognitionListener 的服务 如下所示 Android 语音识别作为 Android 4 1 和 4 2 上的服务 https stackoverflow com questions 14940657 a
  • 静音时的 CSCore 环回录音

    我在用着CSCore WasapiLoopbackCapture录制系统声音 但当系统没有声音时 根本不录音 例如 在播放音乐并录制音乐时 输出文件的持续时间小于曲目的持续时间 我希望它即使在系统中没有声音时也能继续录制 但我没有找到任何属
  • DisplayFormat 数据注释不起作用

    我的模型类中有以下数据注释 Required ErrorMessage Required DisplayFormat ApplyFormatInEditMode true DataFormatString 0 MM dd yyyy publ
  • Safari 中的 css 颜色渲染不同

    我正在尝试为我的网络应用程序选择颜色 但意识到与 Firefox 或 Chrome 相比 Safari 呈现样式表的方式存在巨大差异 屏幕截图中的红色应该是 ff3366 但 safari 似乎选择渲染 ff0036 我不知道为什么我找不到
  • 在 Javascript 中处理多个按键事件的最佳方法是什么?

    游戏中按空格键会进行角色射击 出现确认框时按空格键会使该框消失 高分形式按空格键会在输入框中添加一个空格 在此示例中 同一键有多个事件 但一次仅触发一个事件 是否有通用 或特定于Javascript 方法或编程方式将事件添加到某个键 以便它
  • 将包含对象的数组转换为不带 foreach 的关联数组

    我有一个类似的数组 json decode 的结果 array 2 0 gt object stdClass 1 3 key gt string 6 sample startYear gt string 4 2000 endYear gt
  • Highchart 动态创建 - 无法正确渲染

    我正在使用动态函数制作高图绘图 在调用函数后它根本不会渲染 稍后如果我调整窗口大小 它会渲染数据吗 有什么具体原因吗 我的功能 var chart document ready function function randomData le
  • R - ggplot2,几个问题,多个相关图

    我在堆栈上问的第一个问题 我对 R 还很陌生 所以请原谅任何冒犯礼仪的行为 我正在使用 ggplot2 绘制 2 个堆积面积图 数据是来自 Oracle 数据库的等待事件 这是一个性能调整图表 我有几个问题 下面的两个图没有正确排列 很可能
  • 如何为 ggplot2 中具有稳定映射的分类变量分配颜色?

    上个月我一直在加快 R 的学习速度 这是我的问题 在 ggplot2 中为具有稳定映射的分类变量分配颜色的好方法是什么 我需要在具有不同子集和不同数量的 calcategories 变量的一组图表中保持一致的颜色 例如 plot1 lt g
  • C++“声明和初始化”语句是表达式吗?

    语言标准说 注 第 5 条定义了语法 求值顺序和含义 58 表达式是一系列运算符和 指定计算的操作数 一个表达式可以产生一个 值并可能引起副作用 尾注 例如 我有下面的代码 int i 1 A obj 那么 上述两种说法都算 表达 吗 st
  • 在Python中的下划线处分割并存储第一个值

    我有一个像 df 这样的 pandas 数据框 带有列构造名称 construct name aaaa t1 2 cccc t4 10 bbbb g3 3 等等 我想首先拆分下划线处的所有名称 并将第一个元素 aaaa cccc 等 存储为
  • Ajax成功函数未接收数据

    下面是我的网络表单的网络方法 它返回数据列表并且工作正常 WebMethod public static List
  • 与 Assembly Load(byte[] rawAssembly) 相反的操作

    我注意到有一种方法System Reflection Assembly 即Assembly Load byte rawAssembly 我想知道是否有类似的相反操作byte Store Assembly assembly 如果没有 我如何将
  • 用于创建具有合并功能的电子邮件模板的良好库

    我正在寻找一个非常好的库 组件 框架来为我的网络应用程序创建电子邮件模板 我们定期发送一些电子邮件 激活你的帐号 Welcome 感谢您的订单 Etc 我想为我的网络应用程序的非技术管理员提供一种方法 查看当前的电子邮件模板 HTML 所见
  • python字符串'“':字符串内的单双引号

    双引号看起来像这样 如果我把它放在 python 字符串中 我会得到这个 在python中 我可以在字符串中放入两个双引号 这会打印为两个双引号 但是 我不能像以前一样在字符串中放置一个双引号 我在 eclipse 中使用 pydev 执行
  • 根据键名从 HashMap 获取字符串值

    我有一个HashMap有各种键和值 我怎样才能得到一个值 我在地图上有一把钥匙叫my code 它应该包含一个字符串 我怎样才能得到它而不必遍历地图 到目前为止我已经 HashMap newMap new HashMap paramMap
  • 仍然可以通过 put 和 printf 到达

    Valgrind 正在报告 printf 和 put 等函数上仍可到达的 错误 我真的不知道该怎么办 我需要摆脱它 因为这是一个学校项目 不能有任何错误 我该如何处理这个问题 从报告中我可以看到这些函数使用malloc 但我一直以为他们自己
  • 使用 XUnit 断言异常

    我是 XUnit 和 Moq 的新手 我有一个以字符串作为参数的方法 如何使用 XUnit 处理异常 Fact public void ProfileRepository GetSettingsForUserIDWithInvalidArg