我有一个测试,它使用外部程序集来访问我们正在测试的应用程序中的UI功能。如果UI未处于适当的状态,则此程序集将抛出自己的自定义类型的异常。
我已经设置了一个TestCleanup方法来杀死应用程序的进程(当TestInitialize启动它时),这样在测试运行完成后,UI将以干净状态重新启动。
这在常规条件下运行良好,但是,每当抛出引用程序集的异常时,它就永远不会进入清理方法并直接跳转到下一个测试。从测试本身抛出的异常(如AssertFailedException)不会发生这种情况。我甚至尝试从测试中抛出一个基本的Exception,并且它得到了清理方法。
答案 0 :(得分:10)
如果在TestInitialize中未捕获到异常,则不会调用TestCleanup。
答案 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
从以上链接中提取:
这是一次有意识的兼容性突破,使单元测试作者可以选择部分清理 初始化的方法。