我如何在 3.2 中以编程方式重新 运行 nunit 测试?

How can I re-run a nunit test programmatically in 3.2?

在 nunit 2.6.4 中,我使用下面的 C# 代码重新运行 一个失败的测试:

TestExecutionContext.CurrentContext.CurrentTest.Run(new NullListener(), TestFilter.Empty);

但是升级到nunit 3.2后,TestExecutionContext.CurrentContext.CurrentTest returns null。如何在 3.2 中重新运行 测试?

如果您尝试重新运行您的测试,因为它们偶尔会因暂时性网络错误或类似错误而失败,NUnit 3.x 引入了一个 Retry 属性,该属性将重试测试给定次数。

我能够实现如下....

using NUnit.Framework.Internal;
using NUnit.Framework.Internal.Commands;
using NUnit.Framework.Internal.Execution;

TestActionCommand command = new TestActionCommand(CommandBuilder.MakeTestCommand(TestExecutionContext.CurrentContext.CurrentTest as TestMethod));
command.Execute(TestExecutionContext.CurrentContext);

我能想到如何在 NUnit 3.x 中完成此操作的唯一方法是将可能导致循环失败的测试代码包装起来,并在循环中放置一个 try catch 块,该循环将继续捕获块。

您可以传入一个重试计数参数,并在循环中对其进行计数,然后在达到最大重试次数后测试失败。

恐怕 运行 测试不支持您在 NUnit 2.6.4 中所做的事情。它仅通过使用多个内部 类 才起作用。我建议使用已发布的 API 并在需要时请求功能,而不是使用内部 类 和将来可能会任意更改的方法。