16

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

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

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

4

4 回答 4

1

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

于 2015-09-13T21:52:36.140 回答
0

这已在 MsTest v2 中修复。

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

从上面的链接中提取:

这是一个有意识的兼容中断,让单元测试编写者可以选择清理部分初始化的方法。

于 2020-01-04T17:13:58.693 回答
0

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

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


        [TestMethod]
        public void Test1()
        {
            try
            {...................}
            catch (Exception e)
            {
                 Cleanup();
                 throw new Exception();
            }
         }
于 2018-09-07T15:57:44.567 回答