在 junit4 中继续执行测试,即使其中一个断言失败

2022-08-31 16:39:38

我使用Jfunc构建了我现有的框架,它提供了一个工具,即使测试用例中的一个断言失败,也可以继续执行。Jfunc使用junit 3.x框架。但是现在我们正在迁移到 junit4,所以我不能再使用 Jfunc,并用 junit 4.10 jar 替换了它。
现在的问题是,我们已经在框架中广泛使用了jfunc,并且对于junit 4,我们希望使我们的代码继续执行,即使其中一个断言在测试用例中失败。
有没有人对此有任何建议/想法,我知道在junit中,测试需要更加原子化,即每个测试用例一个断言,但由于某种原因,我们不能在我们的框架中这样做。


答案 1

您可以使用错误收集器规则执行此操作。

要使用它,请首先将规则作为字段添加到测试类中:

public class MyTest {
    @Rule
    public ErrorCollector collector = new ErrorCollector();

    //...tests...
}

然后将断言替换为对 的调用。collector.checkThat(...)

例如:

@Test
public void myTest() {
    collector.checkThat("a", equalTo("b"));
    collector.checkThat(1, equalTo(2));
}

答案 2

我也使用 ErrorCollector,但也使用 assertThat 并将它们放在 try catch 块中。

import static org.junit.Assert.*;
import static org.hamcrest.Matchers.*;

@Rule
public ErrorCollector collector = new ErrorCollector();

@Test
public void calculatedValueShouldEqualExpected() {
    try {
        assertThat(calculatedValue(), is(expected));
    } catch (Throwable t) {
        collector.addError(t);
        // do something
    }
}

推荐