2012-01-10 5 views

답변

4

테스트 데코레이터가 있습니다. 예를

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

'RepeatedTest' 데코레이터는 JUnit에서 가져오고 코드 예제에는 Spring 어노테이션이 포함되어 있지 않습니까? – javanna

+1

스프링에서만 작동합니다. –

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를 참조하십시오 난 그냥 (봄 당신이 얻은 대답 중 하나가 필요합니다) 추가 depedency을 필요로하지 않는 다음과 같은 해결책을 발견했다.

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

@RunWith(Parameterized.class) 

그런 다음 빈 매개 변수의 숫자는 당신이 테스트를 실행할 횟수와 동일 제공하기 위해 다음과 같은 방법을 추가

Parameterized 러너와 함께 테스트를 실행

이렇게하면 루프를 작성하지 않아도됩니다. 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 
    } 
} 

당신은이 두 클래스를하기 만합니다

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 포함 ).

관련 문제