忽略 TearDown 或清理代码中的异常是否可以

Is it Ok to ignore exceptions in TearDown or cleanup code

我在自动化中有一个测试套件 运行。所有这些测试都是功能性 UI 测试。看起来像下面

[SetUp]
public void Setup()
{
    CreatePolicy();
}    

[Test]
public void Test1()
{
    EditPolicyAndValidateResults();
}

[Test]
public void Test2()
{
   EditPolicyAndValidateResults();
}

[TearDown]
public void TearDown()
{   
    DeletePolicy();
}

现在,问题是 DeletePolicy() 有时会失败(随机地针对一两个测试),因此相应的测试失败。 为了避免失败,如果向 DeletePolicy() 添加了一个 try catch 块,它看起来像下面这样:

[TearDown]
public void TearDown()
{
    try
    {
        DeletePolicy();
    }
    catch(Exception ex)
    {
        // Do nothing
    }
}

由于测试 DeletePolicy() 功能不是我的测试用例的目的,所以我觉得这种方法很好。这是正确的还是我遗漏了什么?

Unit Testing的一般模式是:ArrangeAct然后AssertAAA

Setup 只是以更好的方式 Arrange 测试的指定方法(例如,通过重新设置任何以前的 mocked/stubbed 对象来节省时间并避免代码重复).这绝不是强制性的,只是一种帮助测试编码人员更好地编写代码的方法。

TearDown 又是一个帮手,它比 Setup 更接近 AAA 的一般概念。这是因为在AAA中没有提到任何关于销毁或清理的内容。

因此,请随意忽略 TearDown 中的任何失败,除非它在某种程度上很重要。也许你的眼睛里隐藏着一些东西,你还没有考虑到。对故障点进行另一个单元测试可能很重要,但这完全取决于您的情况。