我有一个单元测试有时会失败,调试它是一件痛苦的事情,因为我不知道它为什么有时会失败。在Eclipse中,如何多次运行JUnit测试用例
Eclipse内部有一种方法可以运行5次或50次的JUnit测试吗?
谢谢。
我有一个单元测试有时会失败,调试它是一件痛苦的事情,因为我不知道它为什么有时会失败。在Eclipse中,如何多次运行JUnit测试用例
Eclipse内部有一种方法可以运行5次或50次的JUnit测试吗?
谢谢。
这里有一个测试装饰器。例如
@Test
@Repeat(10)
public void FailRandomlyNeedToKnowWhy() {
....
}
“RepeatedTest”装饰器来自JUnit,而您的代码示例包含Spring注释,不是吗? – javanna 2012-01-29 19:04:40
它仅适用于Spring – 2012-07-13 11:51:34
你有没有试过类似的东西?
@Test
public void runMultipleTests() {
for (int i = 0; i < 10; i++) {
myTestMethod();
}
}
啊。有一个想法。如果我绝望,我可能会尝试。 – Thom 2012-01-10 15:10:37
见Junit的API在 http://junit.org/apidocs/junit/extensions/RepeatedTest.html
我只是发现了以下解决方案,它不需要任何额外的depedency(需要你有答案的一个弹簧)。
运行与Parameterized
亚军测试:
@RunWith(Parameterized.class)
然后添加下面的方法提供了许多空参数等于要运行测试的次数:
@Parameterized.Parameters
public static List<Object[]> data() {
return Arrays.asList(new Object[10][0]);
}
这样你甚至不必编写循环。 IntelliJ和eclipse也将每次迭代的结果组合在一起。
灵感上this solution:
使用@Repeat注释是这样的:
public class MyTestClass {
@Rule
public RepeatRule repeatRule = new RepeatRule();
@Test
@Repeat(10)
public void testMyCode() {
//your test code goes here
}
}
您只需要这两个类:
Repeat.java:
import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
import static java.lang.annotation.ElementType.METHOD;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target({ METHOD, ANNOTATION_TYPE })
public @interface Repeat {
int value() default 1;
}
RepeatRule.java:
import org.junit.rules.TestRule;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;
public class RepeatRule implements TestRule {
private static class RepeatStatement extends Statement {
private final Statement statement;
private final int repeat;
public RepeatStatement(Statement statement, int repeat) {
this.statement = statement;
this.repeat = repeat;
}
@Override
public void evaluate() throws Throwable {
for (int i = 0; i < repeat; i++) {
statement.evaluate();
}
}
}
@Override
public Statement apply(Statement statement, Description description) {
Statement result = statement;
Repeat repeat = description.getAnnotation(Repeat.class);
if (repeat != null) {
int times = repeat.value();
result = new RepeatStatement(statement, times);
}
return result;
}
}
2016年10月25日编辑: 为了使用此解决方案使用@RunWith(PowerMockRunner.class)
,更新时Powermock 1.6.5(包括this patch)。
你试图测试什么? – Venki 2012-01-10 15:03:10
我的方法之一。 – Thom 2012-01-10 15:05:38
JUnit 3.x或4.x? – mikej 2012-01-10 15:07:38