gpt4 book ai didi

junit - 使用 JUnit 重新运行失败的测试脚本 'completely'

转载 作者:行者123 更新时间:2023-12-01 11:00:07 25 4
gpt4 key购买 nike

我在这个论坛的 How to Re-run failed JUnit tests immediately? 找到了一些重新运行失败的@Test 的解决方案.在我的例子中,我从命令行执行测试。如果失败,我想重新运行完整的测试。下面给出的是我的测试脚本模板,如果失败我想重新运行所有内容(从头到尾)

@BeforeClass
public static void Start(){
...
}

@Test
public void Test_One(){
...
}

@Test
public void Test_Two(){
...
}

@AfterClass
public static void End(){
...
}

如果我的测试脚本失败,我将在 End() 方法中获知。如果失败,我想运行一切

@BeforeClass
@Test (all @Test)
@AfterClass

JUnit 有可能吗?我不确定我使用的模板是否正确:(

最佳答案

贾纳基尔,这是一个很好的问题。我试图找到一些解决方案,但我没能为这个任务找到干净的解决方案。我只能建议做一些最终会起作用的解决方法。因此,为了重新运行套件,您需要执行以下步骤:

  1. 您需要创建@ClassRule 才能执行整个套件。您可以使用以下代码重试所有套件:

    公共(public)类 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 方法之后进行,这一点非常重要。

如果你需要在成功重试后进行“绿色构建”,你需要编写一堆其他令人沮丧的代码。

  1. 您需要创建不允许“发布”失败结果的@Rule。例如:


公共(public)类 FailedRule 扩展 TestWatcher {



@Override
public Statement apply(final Statement base, final Description description) {
返回新声明(){
@覆盖
public void evaluate() 抛出 Throwable {
List errors = new ArrayList ();
尝试 {

base.evaluate();

} catch (AssumptionViolatedException e){
log.error("", e.getMessage());

如果(isLastRun()){
扔 e;
}

} catch (Throwable t){
log.error("", t.getMessage());
如果(isLastRun()){
扔 t;
}
}
};

};
}
}

isLastRun() – 验证它是否是最后一次运行的方法,只有当 ir 是最后一次运行时才会失败。

只有最后一次重试需要发布以标记您测试失败并构建“红色”。3. 最后在你的测试类中你需要注册两条规则:



@Rule
public FailedRule ruleExample = new FailedRule ();
@ClassRule
public static Retrier retrier = new Retrier (3);

在重试器中,您可以传递重试尝试的次数。

我希望有人可以提出更好的解决方案!

关于junit - 使用 JUnit 重新运行失败的测试脚本 'completely',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11867683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com