繁体   English   中英

在Eclipse中,如何多次运行JUnit测试用例

[英]In Eclipse, how do I run a JUnit test case multiple times

我有一个单元测试有时会失败并调试它是一个痛苦,因为我不知道为什么它有时会失败。

在Eclipse中有没有办法让我可以运行5次或50次JUnit测试?

谢谢。

我刚刚找到了以下解决方案,它不需要任何额外的依赖性(你得到的答案之一需要Spring)。

使用Parameterized runner运行测试:

@RunWith(Parameterized.class)

然后添加以下方法以提供许多空参数等于您要运行测试的次数:

@Parameterized.Parameters
public static List<Object[]> data() {
    return Arrays.asList(new Object[10][0]);
}

这样你甚至不必编写循环。 IntelliJ和eclipse还将每次迭代的结果组合在一起。

你尝试过这样的事吗?

@Test
public void runMultipleTests() {
    for (int i = 0; i < 10; i++) {
        myTestMethod();
    }
}

有一个测试装饰器。 请参阅http://junit.org/apidocs/junit/extensions/RepeatedTest.html上的 Junit API

例如

@Test  
@Repeat(10)  
public void FailRandomlyNeedToKnowWhy() {  
    ....
}

灵感来自这个解决方案

像这样使用@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包括此补丁 )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM