2012-01-10 13 views

cevap

4

Bunun için bir test dekoratör var. Örneğin

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

'RepeatedTest' dekoratörü JUnit'ten geliyor, kod örneğiniz bir Spring ek açıklama içeriyor, değil mi? – javanna

+1

Sadece Spring üzerinde çalışıyor –

8

Böyle bir şey denediniz mi?

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

Ahh. Bir düşünce var. Çaresiz kalırsam deneyebilirim. – Thom

13

için http://junit.org/apidocs/junit/extensions/RepeatedTest.html

de JUnit API Bkz Sadece (Bahar Elindeki cevaplar biri için gereklidir) herhangi bir ek depedency gerektirmez aşağıdaki çözümü buldum.

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

@RunWith(Parameterized.class) 

Sonra boş bir dizi parametre testi çalıştırmak istediğiniz kaç kez eşittir sağlamak için aşağıdaki yöntemi ekleyin:

Parameterized koşucu ile test çalıştırın

Bu sayede bir döngü yazmanız bile gerekmiyor. IntelliJ ve tutulma aynı zamanda her iterasyonun sonuçlarını bir araya toplar.

1

this solution üzerine ilham:

Kullanım @Repeat açıklama şöyle:

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 
    } 
} 

Bu iki sınıfları gereken tek olacak

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 Düzenleme: Bu solüsyon kullanmak için @RunWith(PowerMockRunner.class), güncelleştirme kullanarak Powermock 1.6.5 (this patch içerir ).

İlgili konular