引发未处理的异常时未调用MsTest TestCleanup方法
本文关键字:调用 MsTest TestCleanup 方法 未处理 异常 | 更新日期: 2023-09-27 18:27:40
我有一个测试,它使用外部程序集来访问我们正在测试的应用程序中的UI功能。如果UI不处于适当的状态,此程序集将引发其自己的自定义类型的异常。
我已经设置了一个TestCleanup方法来终止应用程序的进程(当TestInitialize启动它时),这样在测试运行完成后,UI就会以干净的状态重新启动。
这在常规条件下工作得很好,但是,每当引用程序集的异常被抛出时,它永远不会进入清理方法,而是直接跳到下一个测试。从测试本身抛出的异常(如AssertFailedException)不会发生这种情况。我甚至试着从测试中抛出一个基本的Exception,它进入了清理方法。
如果在TestInitialize中未捕获异常,则不会调用TestCleanup。
- http://web.archive.org/web/20140310065725/http://connect.microsoft.com/VisualStudio/feedback/details/694337/testcleanup-方法在应该运行的时候没有运行
- 当MSTest在TestInitialize中失败时,为什么';t执行TestCleanup
- [ClassCleanup]和[TestCleanup]在什么情况下不运行
不幸的是,这与C#处理构造函数中异常的方式不同:当这种情况发生时,会调用终结器。
这在MsTest v2中得到了修复。
https://github.com/Microsoft/testfx/issues/250
摘录自以上链接:
这是一个有意识的compat中断,让单元测试编写人员可以选择部分清理初始化的方法。
但是您可以直接从catch块调用CleanUp方法
[TestCleanup]
public void Clenup()
{
..............
}
[TestMethod]
public void Test1()
{
try
{...................}
catch (Exception e)
{
Cleanup();
throw new Exception();
}
}