時々失敗する単体テストがあり、デバッグが苦しいです。Eclipseでは、JUnitのテストケースを複数回実行するにはどうすればいいですか?
私はJUnitテストを5回または50回実行する方法がありますか?
ありがとうございました。
時々失敗する単体テストがあり、デバッグが苦しいです。Eclipseでは、JUnitのテストケースを複数回実行するにはどうすればいいですか?
私はJUnitテストを5回または50回実行する方法がありますか?
ありがとうございました。
このためのテストデコレータがあります。例
@Test
@Repeat(10)
public void FailRandomlyNeedToKnowWhy() {
....
}
'RepeatedTest'デコレータはJUnitから来ていますが、コードサンプルにSpringアノテーションが含まれていますね。 – javanna
これはSpringのみで動作します –
あなたはこれを試しましたか?
@Test
public void runMultipleTests() {
for (int i = 0; i < 10; i++) {
myTestMethod();
}
}
ああ。考えがあります。私が絶望的になるなら、私はそれを試みるかもしれない。 – Thom
ため http://junit.org/apidocs/junit/extensions/RepeatedTest.html
でJUnitのAPIを参照してください。私は(春は、あなたが得た答えの1のために必要とされる)任意の追加のdepedencyを必要としない、次の解決策を見つけました。
Parameterized
ランナーを使用してテストを実行します。
@RunWith(Parameterized.class)
次に空のパラメータの数を提供するために、次のメソッドを追加するには、テストを実行する回数に等しい:
@Parameterized.Parameters
public static List<Object[]> data() {
return Arrays.asList(new Object[10][0]);
}
このようにループを書く必要はありません。 IntelliJとEclipseは、各反復の結果をまとめてグループ化します。
this solutionにインスピレーションを得た:このような
使用@Repeat注釈:
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;
}
public class MyTestClass {
@Rule
public RepeatRule repeatRule = new RepeatRule();
@Test
@Repeat(10)
public void testMyCode() {
//your test code goes here
}
}
をあなたはこれらの2つのクラスをのみ必要になります
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
私の方法の一つです。 – Thom
JUnit 3.xまたは4.x? – mikej