2013-05-13 53 views
30

Tôi có một bài kiểm tra @Parameterized junit chúng sinh sản 50 kiểm tra:Các thử nghiệm được tham số hóa JUnit: làm cách nào để chỉ chạy một thử nghiệm cụ thể từ IntelliJ/Eclipse?

@RunWith(Parameterized.class) 
public class NurseRosteringSolveAllTurtleTest ... { 

    @Parameterized.Parameters(name = "{index}: {0}") 
    public static Collection<Object[]> getSolutionFilesAsParameters() { 
     return ... // returns 50 Files. 
    } 

    public NurseRosteringSolveAllTurtleTest(File unsolvedDataFile) { 
     ... 
    } 

    ... 

    @Test 
    public void solveDataFile() { 
     ... 
    } 

} 

Chạy phải mất một tiếng đồng hồ (và nó không thể rút ngắn thời gian đó, họ là những thử nghiệm tích hợp). Kiểm tra 28 thất bại.

Làm cách nào để chạy thử nghiệm 28 một mình mà không chạy 49 thử nghiệm khác? Không thay đổi mã thực tế, chỉ cần cấu hình một số -D hoặc một cái gì đó tương tự trong cấu hình chạy của IntelliJ (hoặc Eclipse).

+0

Tôi đã đệ trình [một vấn đề tại bộ theo dõi vấn đề của junit] (https://github.com/junit-team/junit/issues/677) –

+2

Tôi thấy sự cố của bạn đã có phản hồi: "* Không có phần bổ trợ nào Cách để thực hiện điều này, vì vậy coi đây là một yêu cầu tính năng. * ":-( –

Trả lời

5

Eclipse tại là (tính đến việc phát hành Mars M4) có thể chạy không chỉ là một thử nghiệm duy nhất từ ​​lớp thử nghiệm tham số nhưng bất kỳ loại cây con.

này có thể là:

  • tất cả các phương pháp cho một dữ liệu duy nhất thiết lập như là trả về bởi các @ Parameterized-method
  • tất cả các bộ dữ liệu cho một đơn @ Test-phương pháp

Và như đã đã đề cập, bài kiểm tra cũng có thể được chỉ định bằng cách nhập tên bài kiểm tra vào văn bản "phương thức" được gửi trong cấu hình khởi chạy. Sẽ có một điểm đánh dấu chỉ ra rằng phương thức không tồn tại, nhưng thử nghiệm sẽ vẫn chạy.

Xem this blog post để biết chi tiết.

22

Tôi vừa thử nghiệm điều này trong Eclipse với một bài kiểm tra tham số đơn giản luôn thất bại trong bài kiểm tra số 4. Người ta có thể nhấp chuột phải vào bài kiểm tra không thành công và chọn Chạy. Chỉ thử nghiệm đó sau đó thực thi.

test output

Kết quả:

just test 4

phiền, tôi không thể nhìn thấy những gì Eclipse đã làm để giải quyết vấn đề. Không có gì rõ ràng là bị thay đổi trong cấu hình chạy. Đặc biệt, nếu bạn chọn chạy cấu hình lần thứ hai, nó sẽ thực hiện tất cả các thử nghiệm.

Một số thử nghiệm khác cho thấy Eclipse sẽ tạo lại tất cả 10 giá trị tham số, nhưng chỉ sử dụng giá trị thứ 4. (Điều này được xác định bằng cách nhúng một câu lệnh in theo phương thức @Parameters).

+2

Không biết tại sao ai đó sẽ downvote câu trả lời này, bởi vì đây là một dẫn rất thú vị. Câu hỏi đặt ra là liệu eclipse có hack nó hay không. biến của JUnit 4. Trong trường hợp thứ hai, chúng ta có thể bắt chước nó trong cấu hình chạy IntelliJ/Eclipse bằng tay –

+0

@GeoffreyDeSmet Tôi nghĩ đây có thể là một câu hỏi hay cho các danh sách gửi thư của Eclipse –

+0

[Đây là cách thực hiện eclipse nó ] (http://blog.moritz.eysholdt.de/2014/11/new-eclipse-junit-feature-run-subtrees.html) –

3

Không chắc chắn nếu nó sẽ giúp, nhưng bạn có thể thử một thủ thuật mà tôi đã sử dụng với các bài kiểm tra tham số Eclipse và JUnit.

Trong cấu hình khởi chạy JUnit trong trường "Phương pháp thử nghiệm", bạn có thể viết tên đầy đủ của kiểm tra tham số, trong ví dụ của bạn phải giống như thế này 'resolveDataFile [28:/path/to/your/file]'. Eclipse sẽ phàn nàn rằng phương thức đó không tồn tại nhưng vẫn ăn trưa thành công.

+0

Cảm ơn cú pháp chính xác. – rolve

2

Đối với một tập hợp con của các bài kiểm tra cũ (27 & 28) Chỉ cần thêm:

`.subList(startInclusive, stopExclusive);` 

trước khi trở về bộ sưu tập các thông số của bạn.

tập con liên tiếp không:

Collection<Object[]> c = Arrays.asList(data).subList(startInclusive, stopExclusive); 
c.add(another subset); 
return c; 
1

Tương tự như câu trả lời Miguel, nếu bạn đang sử dụng JUnit 5 của

@ParameterizedTest 
@CsvFileSource(resources = arrayOf("/sender.csv")) 

bạn có thể vào tập tin csv của bạn và "nhận xét ra" một số dòng bằng cách thêm vào trước các nhân vật # đối với họ.

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