NUnit:当 OneTimeTearDown 失败时如何使测试失败

4
摘要目标:我正在使用NUnit(目前是3.9.0)进行工作。一些在OneTimeTearDown方法中完成测试的工作失败时,我需要一个指示,即一个或多个测试应该失败。 背景:我正在使用NUnit作为单元测试框架实现PACT测试。在消费方,运行所有测试后,我必须生成并上传PACT文件到PACT代理服务器。如果这失败了,例如PACT代理服务器宕机,我需要有一个指示; 即一个或所有测试应该失败。 问题:是否可以使用NUnit实现此目标?如果可以,请问如何实现?或者是否有更好的方法来实现我的目标?
2个回答

2
您可以从OneTimeTearDown方法中调用与测试中相同的断言方法。以下是一个示例,它会导致测试运行失败:

[TestFixture]
public class SomeClassTests
{
    [OneTimeTearDown]
    public void Cleanup()
    {
        Assert.Fail("Failed to upload file to the PACT broker");
    }

    [Test]
    public void TestMethod()
    {
        Assert.Pass();
    }
}

这是在ReSharper UT运行器中的执行结果:

enter image description here

另一种在拆卸方法中失败测试运行的选项是抛出异常。

1
很遗憾,我无法重现您的解决方案。使用NUnit 3.9.0、Visual Studio 2015和ReSharper 10.0.2。在ReSharper UnitTest Runner或Visual Studio Test Explorer中,我都无法得到任何提示表明出现了问题。我只能在测试文本输出中看到它。但这非常不方便,我怀疑开发人员会看到这个提示。而且我们需要在构建服务器上进行一些修改。我也找不到在NUnit中设置任何标志以重现您的解决方案,或者在ReSharper中进行任何设置。 - kryz
我使用NUnit 3.9.0、Visual Studio 2015和ReSharper 2016.1.1,这个功能对我有效。因此,很可能这个功能是在10.0.2之后的某个版本的ReSharper UT Runner中引入的。 - CodeFuller
有了更新的ReSharper版本,它可以按照您所描述的方式工作。我能否说服我们所有的开发人员甚至安装ReSharper是另一个问题 ;) 而且这个解决方案只涵盖了开发机器。在我们的构建服务器上,构建仍然是绿色的。因此,我更喜欢有一种方式来使实际的测试用例失败。这将涵盖所有情况。尽管如此,非常感谢您的贡献! - kryz

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接