如何处理 MSTest 中的 currentDomain.UnhandledException

2024-06-18

我尝试根据答案实施解决方案单元测试时如何处理其他线程引发的异常? https://stackoverflow.com/a/934604/518530,但我仍然不明白在处理程序中要做什么。假设我有一个测试:

[TestMethod]
void Test()
{
    new Thread(() => { throw new Exception(); }).Start();
}

我对所有测试进行了全局初始化:

[AssemblyInitialize]
public static void AssemblyInitialize(TestContext context)
{
    AppDomain currentDomain = AppDomain.CurrentDomain;
    currentDomain.UnhandledException += currentDomain_UnhandledException;       
}

static void currentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
    Exception ex = e.ExceptionObject as Exception;
    if (ex != null)
        Trace.WriteLine(ex);

        Assert.Fail("Unhandled Exception in thread.");
}

问题是 Assert.Fail 实际上抛出了异常,该异常再次被 currentDomain_UnhandledException 捕获,并导致 MSTest 崩溃(stackoverflow?)。我不想捕获 Assert.Fail,但我想让测试失败。如何解决呢?

我知道我可以捕获异常并在测试的主线程上调用它,但我需要数千个测试的全局解决方案。我不想让每一个测试都变得复杂。


这是我解决问题的方法:

        private List<(object sender, UnhandledExceptionEventArgs e)> _UnhandledExceptions;
        [TestInitialize()]
        public void Initialize()
        {
            _UnhandledExceptions = new List<(object sender, UnhandledExceptionEventArgs e)>();
            AppDomain.CurrentDomain.UnhandledException += (sender, e) => {
                _UnhandledExceptions.Add((sender, e));
            };
        }
        [TestCleanup()]
        public void Cleanup()
        {
            if (_UnhandledExceptions.Count != 0) Assert.Fail($"There were {_UnhandledExceptions.Count} unhandled Exceptions! <{string.Join(">," + Environment.NewLine + "<", _UnhandledExceptions.ToArray().Select(ev => ev.e.ExceptionObject))}>.");
        }

我选择Assert.fail over Assert.AreEqual(0因为它分散了人们对实际问题的注意力。 (可惜没有CollectionAssert.IsEmpty()方法,实际上在错误时打印集合。

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

如何处理 MSTest 中的 currentDomain.UnhandledException 的相关文章

  • MVC 2视图显示错误的模型信息

    我在一个项目中使用 MVC 2 但我遇到了视图问题 在控制器中我有代码 return View calendarDay 如果我调试这一行并检查 calendarDay 它会告诉我 calendarDay Id 属性等于 2 在视图中我有一些
  • 具有自动返回类型推导的 Friend 函数模板无法访问私有成员

    抱歉这个问题的标题太复杂了 我试图描述我为这个问题构建的最小 SSCCE 我有以下代码 include
  • 是否有任何替代方法来实现 WebRTC SFU,只有 1 个上传流?

    我有一个服务器 能够将 WebRTC 媒体数据从 A 中继到 B 对于视频会议 如果我们采用 P2P 方法 则会创建一个网状网络 当P2P不起作用的时候 我们就可以拥有这个中继服务器 主要问题是在网状网络中 对于N个参与者来说 上传链路的数
  • 如何防止 Parallel.ForEach 循环在运行时更改任务数量?

    我正在使用Parallel ForEach循环做一些工作 我用localInit像这样 localInit gt new foo new Foo bars CreateBars 根据文档 https learn microsoft com
  • Linq Any 始终返回 true

    我已经使用 Linq to Entities 多年 但这是我第一次遇到这个问题 我有Tips and Items表 每个提示可以有很多项目 我的数据库中只有 3 个项目 编辑项目时 我想确保GivenId对于具有相同提示的项目 字段是唯一的
  • 预期在模拟中调用一次,但使用 Moq 时调用次数为 0 次

    我收到错误 在mock上调用一次 但是0次 下面是我的代码结构 public class GenerateAddress IGenerateAddress public GenerateAddress IAddress createAdd
  • 使用 rhino 模拟进行 lambda 单元测试失败

    如果我有这个测试 Expect Call session Single
  • gcc 的错误?模板类中友元函数的访问控制问题

    我有一个模板类 并在类中定义了一个友元函数 include
  • ofstream::operator<<(streambuf) 是一种复制文件的缓慢方法

    我需要一种跨平台 无需外部库的复制文件的方式 在我的第一遍中 我想出了 省略错误处理 char buffer LEN ifstream src srcFile ios in ios binary ofstream dest destFile
  • 在 Visual Studio 2017 mac 上安装扩展 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在尝试在 Visual Studio for Mac 上安装 Visual Studio Marketplace 扩展 但是 Vi
  • 静态成员函数中的封闭类的 C++ 类型

    我认为这是完全不可能的 但如果呢 在任何版本的 C 中 是否有可能以某种方式获取静态成员函数中封闭类的类型 class Impossible public static void Fun typedef Impossible Enclosi
  • 在多个线程中添加和删除时 List 中的 null 值

    我知道 C System Collections Generic List 对象不是线程安全的 但我想知道为什么这段代码会生成空值 Task Run gt for var i 0 i lt 10 i var str Test i list
  • 获取上下文菜单的控制

    我有一个如下所示的上下文菜单 A 1 2 3 选择 1 2 或 3 后 我需要访问调用上下文菜单的对象 意思是如果这是 textbox1 的上下文菜单 那么我需要访问该对象 我该怎么做 忘了说了 这是一个WPF应用程序 所以我使用 Syst
  • 如何打开 Outlook 已接收和阅读电子邮件

    我们有 5 个人 使用同一封电子邮件通过 Outlook 回复客户 我想设计一个程序来打开所有已发送的电子邮件 阅读它们 打开它们 找到第一个人的签名 并在他 她的计数器中添加一个数字 以便我可以得出一些统计数据 关于如何打开 Outloo
  • Cmake:在自定义目录中查找 protobuf 包

    我有 cmake 3 10 x 并下载了当前的 protobuf 源 3 6 1 使用 cmake 我创建了 bin 目录 PROTOBUF SOURCE DIR bin 在其中成功构建了该库 下一步我想在我的基于 cmake 的项目中使用
  • 实现多个接口的 Service Fabric Actor 接口

    我正在构建一个应用程序 其中有多个不同的参与者类型 这些参与者类型对于某些不同的数据对象具有相同类型的行为 CRUD 为了更轻松地创建处理此问题的代码 我尝试创建一个这些参与者可以实现的接口 这意味着我有一个看起来像这样的参与者界面 pub
  • Flask 从线程中删除会话变量

    我尝试实施投票系统 它的工作原理是这样的 如果用户对帖子进行投票 我会在会话变量中记录其临时状态 已投票 已加星标等 如果当前用户在我将结果保存到临时表之前尚未投票 用户可以在 5 分钟内更改投票 5 分钟后 结果将使用线程永久写入数据库
  • 系统.安全.加密与 PCLCrypto

    我们正在删除系统中的许多共享功能并将其移植到 PCL 库中 我在使用 PCLCrypto 时遇到问题 我正在获取数据库中的一些现有数据 并尝试使用相同的算法对其进行解密 我得到了值 但末尾有 16 个额外字节 这些字节都是垃圾 参见下面的代
  • 单元测试期间的 Python 日志捕获

    我正在尝试捕获在 python 单元测试过程中创建的日志 并在此处看到了代码 https stackoverflow com a 1049375 576333 https stackoverflow com a 1049375 576333
  • 从 C# 调用 C++ DLL

    我想使用 C 中的 C DLL C DLL 是win32 控制台应用程序 我已成功调用它 并希望在 C 中处理来自 C 的数据 然而 C 应用程序在执行 DLL 后退出 即这一行 GetArrayFromDLL 我是 C 和 Visual

随机推荐

  • 导航到特定的数据透视项

    当我点击主页上的图像时 如何导航到数据透视表的特定数据透视项 主页上的图像的 XAML 代码如下
  • UISearchBar 取消按钮没有响应

    我已经实现了搜索栏 一旦用户将焦点放在搜索栏中 它就会显示取消按钮 为此我写了searchBar showsCancelButton YES in my searchBarTextDidBeginEditing方法 在searchBarSe
  • 不允许从此上下文调用 Browser.inputBox()

    在我第一次使用 Google 脚本时 我尝试定义一个调用 Browser input 方法来获取用户名的函数 但我总是收到以下错误消息 不允许从此上下文中调用 Browser inputBox 我必须说 我是从葡萄牙语环境翻译的 因为英语中
  • 为什么签名的 Android apk 无法在模拟器上运行

    我已经制作了一个android项目的签名apk 每当我的客户尝试在模拟器上运行它时 他都会遇到以下错误消息 D Android android sdk windows tools gt adb install r abc apk 500 K
  • Draggable 正在阻止触摸事件

    我正在尝试使用拖动来来回移动 div 这部分工作正常 直到 div 具有可滚动内容 由于滚动条 这在桌面上不是问题 但在触摸设备上会出现问题 由于触摸事件与拖动事件冲突 我无法滚动内容 我尝试创建一个条件来检测拖动是否水平方向多于垂直方向
  • 将 NSString 分离成 N​​SArray,但允许用引号对单词进行分组

    我有一个搜索字符串 人们可以使用引号将短语组合在一起 并将其与单个关键字混合 例如 像这样的字符串 Something amazing rooster 我想把它分成一个 NSArray 这样它就有Something amazing 不带引号
  • 的 CSS margin-top 影响父级的边距

    我已经研究这个问题有一段时间了 但还没有找到直接的答案 当向元素添加页边距顶部时 就我而言 它主要发生在标题上 在许多情况下 边距顶部是与父级共享的 HTML div h1 My title h1 div CSS div padding 2

  • 传递多个参数或对象(单击)

    问题是将对象或多个参数从模板传递到组件 并使用它们将数据添加到 API 任务 service ts addTasks task Task Observable
  • ESLint Airbnb ES6 和 Redux 异步操作围绕箭头主体的意外块语句

    我究竟做错了什么 我有其他三个异步操作也有同样的问题并且无法修复它 当你看一眼箭头函数文档 https developer mozilla org en docs Web JavaScript Reference Functions Arr
  • 大小 8 2 的读/写无效

    在处理我的学校项目时 在 Unix 学校服务器上编译我的项目后 我不断收到来自 Valgrind 的以下错误 并且无法运行该程序 因为我收到 分段错误 11 95183 Memcheck a memory error detector 95
  • Laravel 保存文件将其发布为 bin 文件

    我试图在 laravel 中保存文件 但它最终被保存为 bin 文件 file request gt file file name Carbon now gt format Y m d strtotime Carbon now file g
  • c# WebClient DownloadProgresschanged TotalBytesToReceive = -1

    我浏览了一下网络 没有看到其他人遇到这个问题 我正在使用使用 DownloadFileAsync 的 Web 客户端 当事件处理程序 DownloadProgressChanged 被调用时 TotalBytesToReceive 来自 D
  • 在 Vega Lite 中使用二维数组数据代替表格

    我正在尝试从普罗米修斯读取数据 https prometheus io https prometheus io 进入 Vega Lite Prometheus 以二维数组返回其数据 如下所示 1 10 3 6 5 0 9 4 11 2 是否
  • 在 C++ 中声明长文字时是否需要长后缀和无符号后缀?

    我对编写 C 代码有一些古老的记忆 例如 long value 0 在过去糟糕的 Win16 日子里 最终以value仅半初始化 即低 16 位是0高 16 位是内存中该位置的任意随机位 于是 我就习惯性地写下了 long value 0L
  • “Inverse SFINAE”以避免不明确的过载

    如果第二个模板实例化 如何防止下面的第一个模板实例化 即如果两者static cast
  • 向下投射通用元素类型

    public class ConfigControlBase
  • 旋转嵌套 SVG

    我在用SVG js http svgjs com并尝试使用 SVG 进行一些操作 我以前使用过 canvas 但我对其生成的图像质量非常失望 因此我决定使用纯 SVG 我设法将所有内容都改为纯 SVG 方法 除了一件事 旋转 我无法让它发挥
  • ngRepeat 中的函数执行过于频繁

    我有三个tabs里面有不同的htmlng include 这些选项卡使用以下方式显示ng repeat 只有一个 HTML 模板包含函数调用 但它执行了 3 次 每个模板执行一次 ng repeat迭代 这里出了什么问题以及如何解决它 va
  • 在 django 管理表单中的选择性文本区域上使用 ckEditor

    我想在 django 管理表单中的特定文本区域应用 ckeditor 而不是在所有文本区域 下面的代码片段将在 django 表单上的每个文本区域上应用 ckeditor class ProjectAdmin admin ModelAdmi
  • 如何处理 MSTest 中的 currentDomain.UnhandledException

    我尝试根据答案实施解决方案单元测试时如何处理其他线程引发的异常 https stackoverflow com a 934604 518530 但我仍然不明白在处理程序中要做什么 假设我有一个测试 TestMethod void Test