我找到了一些解决方案,重新运行在这个论坛未能@Test 如何立即重新运行失败的JUnit测试? 。 在我来说,我执行命令行测试。 我想如果它不能重新运行完整的测试。 下面给出我的测试脚本,模板,我想重新运行一切(从开始到结束),如果失败
@BeforeClass
public static void Start(){
...
}
@Test
public void Test_One(){
...
}
@Test
public void Test_Two(){
...
}
@AfterClass
public static void End(){
...
}
我会在结束()方法来知道我的测试脚本已失败。 如果失败了,我想运行一切像
@BeforeClass
@Test (all @Test)
@AfterClass
是否有可能使用JUnit? 我不知道如果我使用的模板是正确的:(
JanakiL,这是一个非常好的问题。 我试图找到一些解决办法,但我没找到这个任务干净的解决方案。 我只能建议做一些变通方法,最终会奏效。 因此,为了重新运行套件你需要做以下步骤:
你需要以完成整个套件创建@ClassRule。 所有的套件,您可以重试使用下面的代码:
公共类Retrier实现TestRule {
private int retryCount; private int failedAttempt = 0; @Override public Statement apply(final Statement base, final Description description) { return new Statement() { @Override public void evaluate() throws Throwable { base.evaluate(); while (retryNeeded()){ log.error( description.getDisplayName() + " failed"); failedAttempt++; } }
}
retryNeeded() - 方法,决定是否需要做重试或不
这将重试,所有测试在您的套房。 该重试@AfterClass方法后,会走的很重要的事情。
如果你需要有“绿建”成功的重试后,你需要写一堆的另一个悲观的代码。
- 您需要创建@rule,不会允许“发布”失败的结果。 作为例子:
public class FailedRule extends TestWatcher {
@Override public Statement apply(final Statement base, final Description description) { return new Statement() { @Override public void evaluate() throws Throwable { List<Throwable> errors = new ArrayList<Throwable>(); try { base.evaluate(); } catch (AssumptionViolatedException e) { log.error("", e.getMessage()); if (isLastRun()) { throw e; } } catch (Throwable t) { log.error("", t.getMessage()); if (isLastRun()) { throw t; } } }; }; } }
isLastRun() - 方法,以验证它是否是最后的运行和故障测试只有在情况下,IR是最后一次运行。
只有最后的重试需要发布,以纪念您测试失败,打造“红色”。 3.最后,在您的测试类,你需要做的注册两个规则:
@Rule public FailedRule ruleExample = new FailedRule (); @ClassRule public static Retrier retrier = new Retrier (3);
在Retrier你可以通过尝试重试的次数。
我希望有人能提出更好的解决方案!
更灵活的解决方案是编写定制的运行。 我在下面的帖子中描述这样的回答:
如何立即重新运行失败的JUnit测试?
使用Eclipse,在JUnit视图中,你有一个按钮“重新运行试验 - 失败第一次”
您还可以看到这样的回答: 如何立即重新运行失败的JUnit测试?