TestRule 上的脏上下文

Dirties context upon TestRule

提问人:Mateusz Korga 提问时间:11/16/2023 更新时间:11/16/2023 访问量:9

问:

''''

import org.junit.rules.TestRule;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;

public class RetryRule implements TestRule {
    private int retryCount;

    public RetryRule(int retryCount) {
        this.retryCount = retryCount;
    }

    public Statement apply(Statement base, Description description) {
        return statement(base, description);
    }

    private Statement statement(final Statement base, final Description description) {
        return new Statement() {
            @Override
            public void evaluate() throws Throwable {

                // implement retry logic here
                for (int i = 0; i < retryCount; i++) {
                    try {
                        base.evaluate();
                        return;
                    } catch (Throwable t) {
                        //  System.out.println(": run " + (i+1) + " failed");
                        System.err.println(description.getDisplayName() + ": run " + (i + 1) + " failed.");
                    }
                }
                System.err.println(description.getDisplayName() + ": giving up after " + retryCount + " failures.");
            }
        };
    }
}

@RunWith(SpringRunner.class)
@SpringBootTest
public class SomeTestClass {

@Rule
private RetryRule rule = new RetryRule(3);

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

}

我有很多用 Junit4 编写的集成测试,由于 Awaitibility.await(...) 机制,有时可能会失败。我发现我可以使用这个TestRule接口重新启动它们几次并尝试使它们通过。但问题是我需要像@DirtiesContext一样重新启动上下文,但只有在测试失败时 - 在 RetryRule 中输入 catch 块。 有什么想法吗?

Java Spring JUnit

评论


答: 暂无答案