我试图重新运行失败的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?
[不幸的是,RetryAttribute
仅在NUnit 3中可用。从透视的角度来看,它已经存在了很长一段时间,已于2015年实施。是否有不能升级正在使用的NUnit版本的原因? ?
[如果情况迫使您继续使用NUnit的旧版本(2012),实现您自己的RetryAttriute
并不困难。该定义可以存在于您的测试程序集中,并引用您正在使用的NUnit的版本。
您可以在现有的V2 RepeatAttribute
之后对这样的属性进行建模,也可以从NUnit 3中的RetryAttribute
中获得一些提示。但是,后者基于完全不同的一组接口,因此,如果没有这些接口,就无法使用修改。
没有一种简单的方法可以有效地从TearDown
方法重新运行测试,因为直到TearDown
方法完成后测试才结束。实际上,修改NUnit 2.6.2本身会更容易。
总结起来,从最简单到最困难的顺序,您可以选择