如何重新运行失败的Nunit Test 2.6.2

问题描述 投票:0回答:1

我试图重新运行失败的Nunit测试,主要是因为硒的松散。

    [TearDown]
    public virtual void TearDown()
    {
        var testName = TestContext.CurrentContext.Test.FullName.Replace("Server.Tests.", string.Empty);

        if (TestContext.CurrentContext.Result.Status == TestStatus.Passed)
            return;
        else if (_testFailure < 3) {
            _testFailure++;
            Console.WriteLine($"\n {testName} {TestContext.CurrentContext.Result.Status}... Retrying attempt {_testFailure}");
            DbReloader.LoadUnitTestData(DbFactory);
            TestExecutionContext.CurrentContext.CurrentTest.Run(new NullListener(), TestFilter.Empty);

        }
        BrowserDriver.GetScreenshot()
                     .SaveAsFile($"{testName}.fail.png", ImageFormat.Png);
    }

问题是测试再次运行后,由于原始测试失败,它将继续进行测试拆卸。如何使用重试的测试结果覆盖TestContext.CurrentContext.Result?

c# selenium unit-testing nunit nunit-2.6
1个回答
0
投票

[不幸的是,RetryAttribute仅在NUnit 3中可用。从透视的角度来看,它已经存在了很长一段时间,已于2015年实施。是否有不能升级正在使用的NUnit版本的原因? ?

[如果情况迫使您继续使用NUnit的旧版本(2012),实现您自己的RetryAttriute并不困难。该定义可以存在于您的测试程序集中,并引用您正在使用的NUnit的版本。

您可以在现有的V2 RepeatAttribute之后对这样的属性进行建模,也可以从NUnit 3中的RetryAttribute中获得一些提示。但是,后者基于完全不同的一组接口,因此,如果没有这些接口,就无法使用修改。

没有一种简单的方法可以有效地从TearDown方法重新运行测试,因为直到TearDown方法完成后测试才结束。实际上,修改NUnit 2.6.2本身会更容易。

总结起来,从最简单到最困难的顺序,您可以选择

  1. 升级到NUnit 3
  2. 添加自定义RetryAttribute
  3. 修改NUnit 2.6.2
© www.soinside.com 2019 - 2024. All rights reserved.