gpt4 book ai didi

java - Junit4 运行一个测试类固定次数并显示结果(eclipse)

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:10:26 24 4
gpt4 key购买 nike

我希望能够将测试类运行指定的次数。该类看起来像:

@RunWith(Parameterized.class)
public class TestSmithWaterman {

private static String[] args;
private static SmithWaterman sw;
private Double[][] h;
private String seq1aligned;

@Parameters
public static Collection<Object[]> configs() {
// h and seq1aligned values
}

public TestSmithWaterman(Double[][] h, String seq1aligned) {
this.h = h;
this.seq1aligned = seq1aligned;
}

@BeforeClass
public static void init() {
// run smith waterman once and for all
}

@Test
@Repeat(value = 20) // does nothing
// see http://codehowtos.blogspot.gr/2011/04/run-junit-test-repeatedly.html
public void testCalculateMatrices() {
assertEquals(h, sw.getH());
}

@Test
public void testAlignSeq1() {
assertEquals(seq1aligned, sw.getSeq1Aligned());
}

// etc
}

上面的任何测试都可能失败(并发错误 - 编辑:失败提供了有用的调试信息)所以我希望能够多次运行该类并且最好以某种方式对结果进行分组。尝试了 Repeat annotation - 但这是特定于测试的(并没有真正使它起作用 - 见上文)并且与 RepeatedTest.class 斗争,它似乎无法转移到 Junit 4 - 我在 SO 上找到的最接近的是 this - 但显然是 Junit3。在 Junit4 中,我的套件看起来像:

@RunWith(Suite.class)
@SuiteClasses({ TestSmithWaterman.class })
public class AllTests {}

而且我看不出可以多次运行它。 Parametrized with empty options真的不是一个选择——因为无论如何我都需要我的参数

所以我一次又一次地在 eclipse 中点击 Control + F11

帮助

编辑(2017.01.25):有人继续将此标记为问题的重复,我明确表示其接受的答案不适用于此处

最佳答案

正如@MatthewFarwell 在评论中所建议的,我实现了一个测试规则 as per his answer

public static class Retry implements TestRule {

private final int retryCount;

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

@Override
public Statement apply(final Statement base,
final Description description) {
return new Statement() {

@Override
@SuppressWarnings("synthetic-access")
public void evaluate() throws Throwable {
Throwable caughtThrowable = null;
int failuresCount = 0;
for (int i = 0; i < retryCount; i++) {
try {
base.evaluate();
} catch (Throwable t) {
caughtThrowable = t;
System.err.println(description.getDisplayName()
+ ": run " + (i + 1) + " failed:");
t.printStackTrace();
++failuresCount;
}
}
if (caughtThrowable == null) return;
throw new AssertionError(description.getDisplayName()
+ ": failures " + failuresCount + " out of "
+ retryCount + " tries. See last throwable as the cause.", caughtThrowable);
}
};
}
}

作为我的测试类中的嵌套类 - 并添加了

@Rule
public Retry retry = new Retry(69);

在同一个类中我的测试方法之前。

这确实起到了作用——它确实重复了 69 次测试——在某些异常的情况下,抛出一个新的 AssertionError,其中包含一些统计信息加上原始 Throwable 作为原因的单个消息。因此统计信息也将在 Eclipse 的 jUnit View 中可见。

关于java - Junit4 运行一个测试类固定次数并显示结果(eclipse),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14418059/

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