MSTest单元测试开始随机失败

问题描述 投票:2回答:2

几天前(11/12)我们为.NET 4.7构建的Windows窗体应用程序意外启动“部分成功”。我将问题追溯到Visual Studio测试步骤。在将单元测试分解为每个DLL的单独步骤后,我已经进一步将其隔离到UI测试DLL。

这是一个简单的vanilla MSTest项目,其中类测试可以在幕后操作的UI部分。主要是操纵控件的数据模型,然后检查控件的细节,以确保数据模型更改具有预期的效果。 UI元素在代码中实例化,可以通过类中的新声明或作为被测试控件的子类的TestClasses实现。不会显示消息框,也不会为人类或外部自动化实际呈现UI元素。

这些测试在Azure“Hosted VS2017”环境中运行。失败的测试运行都有完全相同的错误消息:

主动测试运行中止。原因:未处理的异常:System.AppDomainUnloadedException:已卸载运行该线程的应用程序域。

我无法辨别失败的模式。不同的单独测试后可能会发生异常。隔离,并行或不并行运行测试似乎不会影响故障。然而,失败似乎确实在频率上增加。所有在本地重新创建的尝试都失败了;我们用来运行单元测试的任何Visual Studio 2017安装都没有问题。

通过Google我可以在这个特定主题上找到的所有内容都是Visual Studio的长期版本的条目,这是一个已被纠正的错误,或其他未解答的问题。有没有人遇到过这种麻烦?

azure-devops mstest azure-pipelines
2个回答
0
投票

自我跟进记录我如何解决这个问题。

原因:实例化从System.Windows.Forms.Control或System.Windows.Forms.Form派生的对象,而不正确处理它们。

我的修复:将所有实例包装在using()块中。


0
投票

当在任何测试中创建后台线程并在其他测试仍在运行时抛出异常时,这将使测试运行崩溃。

重要的是,任何启动线程的代码都会正确等待这些线程完成并处理可能发生的任何异常。或者设置测试以便它可以执行此错误处理和/或清理。

在其他测试执行的同时运行后台线程可以使您的整个测试套件变得非常好:)。你可能已经发现了。并且可能会导致您的生产代码出现问题。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.