抛出未处理的异常时未调用MsTest TestCleanup方法

时间:2013-08-14 08:30:25

标签: c# automation mstest

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

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

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

4 个答案:

答案 0 :(得分:10)

答案 1 :(得分:0)

不幸的是,这与C#处理构造函数中的异常的方式不同:当发生这种情况时,会调用终结器。

答案 2 :(得分:0)

但是您可以直接从catch块调用CleanUp方法

        [TestCleanup]
        public void Clenup()
        {
               ..............
        }


        [TestMethod]
        public void Test1()
        {
            try
            {...................}
            catch (Exception e)
            {
                 Cleanup();
                 throw new Exception();
            }
         }

答案 3 :(得分:0)

这在MsTest v2中已解决。

https://github.com/Microsoft/testfx/issues/250

从以上链接中提取:

这是一次有意识的兼容性突破,使单元测试作者可以选择部分清理 初始化的方法。