引发未处理的异常时未调用MsTest TestCleanup方法

本文关键字:调用 MsTest TestCleanup 方法 未处理 异常 | 更新日期: 2023-09-27 18:27:40

我有一个测试,它使用外部程序集来访问我们正在测试的应用程序中的UI功能。如果UI不处于适当的状态,此程序集将引发其自己的自定义类型的异常。

我已经设置了一个TestCleanup方法来终止应用程序的进程(当TestInitialize启动它时),这样在测试运行完成后,UI就会以干净的状态重新启动。

这在常规条件下工作得很好,但是,每当引用程序集的异常被抛出时,它永远不会进入清理方法,而是直接跳到下一个测试。从测试本身抛出的异常(如AssertFailedException)不会发生这种情况。我甚至试着从测试中抛出一个基本的Exception,它进入了清理方法。

引发未处理的异常时未调用MsTest TestCleanup方法

如果在TestInitialize中未捕获异常,则不会调用TestCleanup。

  1. http://web.archive.org/web/20140310065725/http://connect.microsoft.com/VisualStudio/feedback/details/694337/testcleanup-方法在应该运行的时候没有运行
  2. 当MSTest在TestInitialize中失败时,为什么';t执行TestCleanup
  3. [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();
            }
         }