java - 使用 Junit 重新运行失败的测试

标签 java testing junit

我正在尝试改进现有的自动 Selenium 测试系统。 我的目标是重复由于连接问题而失败的测试。 我已经找到并尝试关注此线程 How to Re-run failed JUnit tests immediately?这表明它非常有用。

在我的例子中,套件由类组成,所以我尝试用@ClassRule 替换@Rule,以便在每次尝试时重复@Before 和@After 部分。 很抱歉我的无知,但我应该把这条规则放在哪里呢?在我的套件类?或者在代表测试的类中?

最佳答案

我是How to Re-run failed JUnit tests immediately?的原回答者

如果我理解正确,您遇到的问题是由于 @Before 引起的在 RetryRule 中的代码之前执行, 和 @After之后被执行。

所以你当前的行为是这样的:

@Before
@Retry
test code
@Retry
@After

但是你可以实现你的 @Before@After通常-有一条规则ExternalResource正是这样做的。你会实现 @Before@After通常:

@Rule public ExternalResource beforeAfter = new ExternalResource() {
    public void before() {
        // code that was in @Before
    }

    public void after() {
        // code that was in @After
    }
}

那么你不需要@Before@After .然后您可以使用 RuleChain 链接这些规则.这会强制执行您的规则:

@Rule public RuleChain chain= RuleChain
                       .outerRule(new LoggingRule("outer rule")
                       .around(new LoggingRule("middle rule")
                       .around(new LoggingRule("inner rule");

所以你的最终解决方案应该是这样的:

private ExternalResource beforeAfter = ...
private RetryRule retry = ...

@Rule public RuleChain chain = RuleChain
                               .outerRule(retry)
                               .around(beforeAfter);

请注意,如果您使用的是 RuleChain ,您不再需要 @Rule ExternalResource 上的注释和 RetryRule , 但你在 RuleChain 上做了.

关于java - 使用 Junit 重新运行失败的测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16738997/

相关文章:

Java(GUI)多次添加JButton?

testing - 亚马逊 EC2 负载测试

unit-testing - 圈复杂度和基本路径

java - IllegalStateException - 没有最后一次调用可用的模拟

android - 如何在android中的单元测试和仪器测试之间共享资源?

java - 如何使用 JLine 在命令行上发出带有删除线效果的文本?

java - 什么是列出已编译的 Java 类所需的所有导入的可移植方法

java - 无法实例化 RegionFactory

reactjs - 如何通过选择数据列表来测试更改事件的触发器

java - 即使在将\n 添加到预期输出后,S.o.println 函数的 JUnit 测试仍然失败