2012-01-10 39 views
8

Tôi có một bài kiểm tra đơn vị không thành công đôi khi và gỡ lỗi nó là một nỗi đau vì tôi không biết tại sao đôi khi nó không thành công.Trong Eclipse, làm thế nào để chạy một trường hợp thử nghiệm JUnit nhiều lần

Có cách nào bên trong Eclipse để tôi có thể chạy thử nghiệm JUnit 5 lần hoặc 50 lần hay gì đó không?

Cảm ơn.

+0

bạn đang cố kiểm tra cái gì? – Venki

+0

Một trong những phương pháp của tôi. – Thom

+0

JUnit 3.x hoặc 4.x? – mikej

Trả lời

4

Có một trình trang trí thử nghiệm cho việc này. Xem API Junit tại http://junit.org/apidocs/junit/extensions/RepeatedTest.html

ví dụ

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

Trình trang trí 'RepeatedTest' xuất phát từ JUnit trong khi ví dụ mã của bạn chứa chú thích Spring, phải không? – javanna

+1

Chỉ hoạt động vào mùa xuân –

8

Bạn đã thử một cái gì đó như thế này?

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

Ahhh. Có một ý nghĩ. Tôi có thể thử điều đó nếu tôi tuyệt vọng. – Thom

13

tôi chỉ tìm thấy các giải pháp sau đây mà không đòi hỏi bất kỳ depedency bổ sung (Xuân là cần thiết cho một trong những câu trả lời bạn nhận được).

Chạy thử nghiệm của bạn với Parameterized Á hậu:

@RunWith(Parameterized.class) 

Sau đó, thêm phương pháp sau đây để cung cấp một số thông số có sản phẩm nào tương đương với số lần bạn muốn chạy thử nghiệm:

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

Bằng cách này bạn thậm chí không cần phải viết một vòng lặp. IntelliJ và nhật thực cũng nhóm các kết quả của mỗi lần lặp lại với nhau.

1

Lấy cảm hứng trên this solution:

Sử dụng @Repeat chú thích như thế này:

public class MyTestClass { 

    @Rule 
    public RepeatRule repeatRule = new RepeatRule(); 

    @Test 
    @Repeat(10) 
    public void testMyCode() { 
     //your test code goes here 
    } 
} 

Bạn sẽ chỉ cần hai loại cổ phiếu này:

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 Edit: Để sử dụng giải pháp này khi sử dụng @RunWith(PowerMockRunner.class), cập nhật cho Powermock 1.6.5 (trong đó bao gồm this patch).

Các vấn đề liên quan