2009-04-15 34 views
64

Có cách nào để yêu cầu JUnit chạy một trường hợp thử nghiệm cụ thể nhiều lần với dữ liệu khác nhau liên tục trước khi tiếp tục với trường hợp thử nghiệm tiếp theo không?Chạy cùng một trường hợp thử nghiệm JUnit nhiều lần với các dữ liệu khác nhau

+4

Bằng cách sử dụng lý thuyết (như được chỉ ra bởi @dfa) Junit sẽ xử lý tất cả các bài kiểm tra dưới dạng một bài kiểm tra và sẽ làm cho khó hơn để tìm ra bài kiểm tra nào đã thất bại. Trong khi các thử nghiệm tham số (như được chỉ ra bởi @ jjnguy) coi tất cả chúng là các thử nghiệm khác nhau, hãy chỉ rõ thử nghiệm nào không thành công. – mindreader

Trả lời

63

hãy xem để junit 4.4 theories:

import org.junit.Test; 
import org.junit.experimental.theories.*; 
import org.junit.runner.RunWith; 

@RunWith(Theories.class) 
public class PrimeTest { 

    @Theory 
    public void isPrime(int candidate) { 
      // called with candidate=1, candidate=2, etc etc 
    } 

    public static @DataPoints int[] candidates = {1, 2, 3, 4, 5}; 
} 
+0

Tôi có vài trường hợp thử nghiệm theo định dạng như testxyz(), testpqr(). Lớp thử nghiệm hiện tại của tôi mở rộng TestCase. – Giridhar

+0

Thos không chạy nếu tôi đang định dạng này. – Giridhar

+0

đầu tiên bạn phải chuyển đổi chúng sang JUnit 4 (bằng cách sử dụng chú thích @Test, trong hầu hết các trường hợp) – dfa

2

Tôi luôn chỉ thực hiện một phương thức trợ giúp thực thi phép thử dựa trên các tham số, và sau đó gọi phương thức đó từ phương thức kiểm tra JUnit. Bình thường, điều này có nghĩa là một phương pháp thử nghiệm JUnit đơn lẻ sẽ thực sự thực hiện nhiều thử nghiệm, nhưng đó không phải là vấn đề đối với tôi. Nếu bạn muốn có nhiều phương thức thử, một phương thức cho mỗi lời gọi riêng biệt, tôi khuyên bạn nên tạo lớp thử nghiệm.

21

Có vẻ như đó là một ứng cử viên hoàn hảo cho các bài kiểm tra tham số.

Nhưng, về cơ bản, các thử nghiệm được tham số cho phép bạn chạy cùng một bộ kiểm tra trên các dữ liệu khác nhau.

Dưới đây là một số bài đăng trên blog tốt về nó:

3

Đây là một bài tôi đã viết cho thấy một số cách chạy các bài kiểm tra nhiều lần với các ví dụ mã:

Run a JUnit test repeatedly

Bạn có thể sử dụng Á hậu @Parametrized hoặc sử dụng nhân vật đặc biệt có trong bài đăng

9

gần đây tôi đã bắt đầu dự án zohhak. nó cho phép bạn viết:

@TestWith({ 
    "25 USD, 7", 
    "38 GBP, 2", 
    "null, 0" 
}) 
public void testMethod(Money money, int anotherParameter) { 
    ... 
} 
1

Nếu bạn không muốn hoặc không thể sử dụng tùy chỉnh Á hậu (. ví dụ như bạn đang sử dụng một Á hậu khác, như Robolectric Á hậu), bạn có thể thử DataSet Rule này.

3

Một cách tốt hơn (cho phép bạn có nhiều hơn một phương pháp thử nghiệm) là sử dụng JUnit với JUnitParams:

import junitparams.Parameters; 
import org.junit.Test; 

@RunWith(JUnitParamsRunner.class) 
Public class TestClass() { 

    @Test 
    @Parameters(method = "generateTestData") 
    public void test1(int value, String text, MyObject myObject) { 
     ... Test Code ... 
    } 

    .... Other @Test methods .... 

    Object[] generateTestData() { 
     MyObject objectA1 = new MyObject(); 
     MyObject objectA2 = new MyObject(); 
     MyObject objectA3 = new MyObject(); 

     return $(
      $(400, "First test text.", objectA1), 
      $(402, "Second test text.", objectA2), 
      $(403, "Third test text.", objectA3) 
     ); 
    } 
} 

Bạn có thể lấy junitparams dự án here.

1

Nếu bạn đang sử dụng @RunWith trong lớp thi của mình, bạn có thể cần xem this.

+0

2018-01-19 downvote. Xin vui lòng có lịch sự để giải thích suy nghĩ của bạn. Bạn có thể học được điều gì đó. –

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