2013-02-14 31 views
17

Tôi có một dự án Maven lớn có nhiều mô-đun trong đó. Khi tôi muốn chạy một bài kiểm tra JUnit từ một mô-đun, tôi chạy 'mvn -Dtest = NameOfTest test' trong thư mục chứa tất cả các mô-đun. Khi tôi chạy lệnh này Maven đi qua từng mô-đun và cố gắng biên dịch nó (mặc dù nó đã được biên dịch), bao gồm việc sao chép một loạt các tệp và thêm vào tổng thời gian của thử nghiệm. Có vẻ như lệnh 'test' cho plugin chắc chắn Maven thực hiện tất cả các bước lên đến thử nghiệm. Tôi đã tự hỏi nếu có một cách để thực hiện chỉ các bước thử nghiệm và không bận tâm với tất cả các biên dịch đã cố gắng và sao chép các tập tin.Chạy các kiểm tra JUnit trong Maven mà không cần xây dựng và sao chép các tệp

Dưới đây là một số đầu ra từ trước khi thử nghiệm bắt đầu:

[INFO] 
[INFO] --- build-helper-maven-plugin:1.5:add-test-source (add-test-source) @ module1 --- 
[INFO] Test Source directory: <directory in module1 with some generated sources> added. 
[INFO] 
[INFO] --- maven-resources-plugin:2.5:testResources (default-testResources) @ module1 --- 
[debug] execute contextualize 
[INFO] Copying 108 resources 
[INFO] Copying 1113 resources 
[INFO] Copying 1 resource 
[INFO] 

Nó lặp đi lặp lại điều này cho mỗi mô-đun khác. Tất cả đã nói phải mất một hoặc hai phút trước khi nó thực sự bắt đầu thử nghiệm. Có ai biết một cách để có được các thử nghiệm để chạy mà không làm phiền với tất cả các biên dịch trước? Vui lòng cho tôi biết nếu tôi có thêm thông tin nào.

Trả lời

36

Nếu những gì bạn muốn làm là chỉ chạy giai đoạn thử nghiệm của vòng đời mà không cần chạy tất cả các giai đoạn trước, bạn cũng có thể gọi được mục tiêu đó được gắn với giai đoạn thử nghiệm:

mvn surefire:test 

hoặc nếu bạn muốn chạy chỉ là một thử nghiệm

mvn -Dtest=NameOfTest surefire:test 
0

Nếu bạn chỉ muốn bỏ qua việc biên soạn các bài kiểm tra từ sử dụng dòng cmd -Dmaven.test.skip=true.

Tôi cũng nên chỉ ra rằng trong khi maven.test.skip sẽ KHÔNG biên dịch bất kỳ thử nghiệm nào, tuy nhiên, sẽ thực hiện bất kỳ thử nghiệm được biên dịch nào đã thực hiện theo cách của họ vào <testOutputDirectory>.

Dựa trên tài liệu cho skip từ trình cắm nguồn tài nguyên maven, việc sao chép tài nguyên thử nghiệm sẽ bị bỏ qua bằng cách sử dụng maven.test.skip arg ở trên.

Đặt thành 'true' để bỏ qua việc sao chép tài nguyên thử nghiệm. Việc sử dụng nó KHÔNG phải là ĐỀ XUẤT, nhưng khá thuận tiện vào dịp này. Thuộc tính người dùng là: maven.test.skip.

+0

Chắc chắn làm điều này cũng bỏ qua thực hiện các bài kiểm tra thực tế? – JamesB

+0

Điều này không hữu ích. Nó ngăn không cho thử nghiệm khởi chạy trong khi không ảnh hưởng đến việc biên dịch và sao chép mà tôi thấy. – Ian

+0

Tôi thấy chỉnh sửa của bạn ngay bây giờ. Nó có thể đã bỏ qua việc biên dịch và sao chép các bài kiểm tra, nhưng tôi muốn bỏ qua tất cả việc biên dịch và sao chép và chỉ khởi chạy thử nghiệm, nếu có thể. Nó cũng ngăn không cho thử nghiệm khởi chạy - bạn có biết cách thử nghiệm vào không? – Ian

0

Điều gì sai khi chỉ chạy thử nghiệm từ bên trong mô-đun mà thử nghiệm nằm trong? Bằng cách đó, Maven sẽ không cố gắng xây dựng các mô-đun khác mà bạn không quan tâm.

+0

@johntrepreneur cũng đề xuất điều đó. Nó không hoạt động trong trường hợp của tôi đối với cơ sở mã cụ thể mà tôi đang làm việc. Nếu bạn biết rằng nó hoạt động nói chung tôi có thể dành thời gian cố gắng để làm cho nó hoạt động. – Ian

+0

@Tôi có thể không thấy ai khác đề xuất những gì tôi có. Bạn có thể xác nhận nơi bạn đang chạy lệnh này từ đâu không? Bạn ngụ ý nó là từ dự án cấp cao nhất có chứa tất cả các mô-đun. Tôi đang nói chạy lệnh từ bên trong các mô-đun mong muốn chính nó. – JamesB

+0

Hmm. Có lẽ anh ta đã xóa bình luận. Tôi đã thực sự thử những gì bạn đang đề xuất trước khi tôi đăng ở đây, chạy thử nghiệm từ bên trong mô-đun thay vì thư mục cấp cao nhất, nhưng một cái gì đó trong các thử nghiệm mà tôi cần phải chạy ném một ngoại lệ vì nó không thể tìm thấy một số tài nguyên nó cần thiết, tôi nghĩ vậy. Đó là một gợi ý tốt mặc dù, và tôi nghĩ rằng nó sẽ làm việc cho những người khác. – Ian

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