2012-01-10 21 views

答えて

4

このためのテストデコレータがあります。例

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

'RepeatedTest'デコレータはJUnitから来ていますが、コードサンプルにSpringアノテーションが含まれていますね。 – javanna

+1

これはSpringのみで動作します –

8

あなたはこれを試しましたか?

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

ああ。考えがあります。私が絶望的に​​なるなら、私はそれを試みるかもしれない。 – Thom

13

ため 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は、各反復の結果をまとめてグループ化します。

1

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.5this patch含む)。

関連する問題