2011-10-25 50 views
6

Tôi đang chạy vào một sự khác biệt khi chạy thử nghiệm Junit trong Eclipse và Ant. Đây là kịch bản:Eclipse thực sự chạy thử nghiệm Junit như thế nào?

Mọi thứ chạy như dự định trong Eclipse, tuy nhiên, tôi không thể có được báo cáo Junit chính xác khi chạy qua tập lệnh xây dựng Ant mà tôi đã bỏ qua. Tôi đã thực hiện một vài thay đổi cho test runner và test case của chúng tôi (tôi đã bổ sung phương thức Test suite() vào tất cả các test test của mình), trả về một Junit4TestAdapter mới, và có custom runner của chúng ta chạy RunNotifier.fireTestAssumptionFailed (Failure) thay vì fireTestAssumption. Bây giờ mọi thứ đều chạy tốt trong Ant, nhưng các thất bại được đánh dấu là được truyền khi chạy trong Eclipse.

Có tài liệu nào cho Eclipse giải thích chính xác cách chạy thử nghiệm Junit không? Về cơ bản, tôi đang tìm hiểu chính xác cách Eclipse thực thi các kiểm tra Junit, cho dù nó chạy trực tiếp thông qua Ant, nếu nó sử dụng Java để giao tiếp với Junit, v.v .. Nếu ai biết giải pháp thực sự cho vấn đề này, tôi cũng hoan nghênh thực sự muốn tự mình giải quyết vấn đề này, tôi chỉ cần một điểm đúng hướng.

+5

Eclipse không sử dụng tệp xây dựng kiến ​​của bạn để chạy thử nghiệm JUnit. Chắc chắn rồi. –

+0

Tôi nhận thức được điều này, tôi đang cố gắng tìm ra sự khác biệt giữa việc chạy cùng một bộ kiểm thử từ Ant là chạy chúng thông qua plugin Eclipse. –

+0

Bạn có thể nhận được một số gợi ý từ trình chạy thử nghiệm Junit Eclipse của bạn, đặc biệt là tab đối số và tab cấu hình. –

Trả lời

17

Để trả lời vấn đề của bạn trước tiên, nếu bạn có sự khác biệt giữa Ant junit và Eclipse JUnit, đó có thể là sự cố classpath hoặc môi trường. Cách dễ nhất là tìm một bài kiểm tra thực hiện khác nhau giữa hai và in ra các thuộc tính hệ thống, và làm việc ở đó từ hướng đó. Một điều cần thử là chạy các kịch bản kiến ​​từ bên trong Eclipse, để xem điều này có tạo ra sự khác biệt hay không (vì môi trường sẽ thay đổi)

Eclipse không sử dụng Ant để chạy thử nghiệm.


Về cách Eclipse chạy thử nghiệm JUnit, dưới đây là tổng quan nhanh. Được cảnh báo: có một số phép thuật sâu trong plugin JUnit Eclipse.

Eclipse có 4 plugin JUnit, tất cả được cài đặt theo mặc định trong hầu hết các cấu hình:

  1. org.eclipse.jdt.junit: git: //dev.eclipse.org/org.eclipse.jdt/ org.eclipse.jdt.junit.git
  2. org.eclipse.jdt.junit.core: git: //dev.eclipse.org/org.eclipse.jdt/org.eclipse.jdt.junit.core.git
  3. org.eclipse.jdt.junit.runtime: git: //dev.eclipse.org/org.eclipse.jdt/org.eclipse.jdt.junit.runtime.git
  4. org.eclipse.jdt.junit4. thời gian chạy: git: //dev.eclipse.org/org.eclipse. jdt/org.eclipse.jdt.junit4.runtime.git

Đây là các gương git của kho lưu trữ CVS thực tế. Thời gian qua tôi đã cố gắng sử dụng chúng, chúng không biên dịch, nhưng chúng sẽ cung cấp cho bạn mã và ít nhất bạn có thể nhập các dự án vào Eclipse và xem chúng.

Nếu chúng ta bỏ qua các trang cấu hình, cách plugin tạo cấu hình chạy, mã cho chế độ xem JUnit và cách nó tìm các kiểm tra phù hợp để chạy, chúng ta có thể tập trung vào cách chạy thử nghiệm.

Các lớp cốt lõi là org.eclipse.jdt.junit.launcher.JUnitLaunchConfigurationDelegateorg.eclipse.jdt.internal.junit.runner.RemoteTestRunner. JUnitLaunchConfigurationDelegate đọc cấu hình khởi chạy và tìm kiếm một JVM trong đó các thử nghiệm sẽ được chạy. Lớp chính cho JVM mới này là RemoteTestRunner. Các thử nghiệm được chạy được chuyển thành các tham số cho JVM được chia rẽ, hoặc là một thử nghiệm đơn lẻ hoặc dưới dạng danh sách các thử nghiệm trong một tệp tạm thời nếu bạn đang thực hiện Chạy như JUnit trên một dự án. Nếu bạn đang gỡ lỗi, JVM mới này có thể được giữ sống bằng cách chọn hộp kiểm Keep alive when debugging trong cấu hình chạy. Trong trường hợp này, JVM sẽ kết nối và chạy lại các kiểm tra hiện có sẽ được gửi qua các ổ cắm.

RemoteTestRunner chạy thử nghiệm và trả lại kết quả qua ổ cắm vào Eclipse, sau đó cập nhật chế độ xem JUnit. Trái tim của điều này là org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference, chạy thử nghiệm (đối với JUnit 4) và org.eclipse.jdt.internal.junit4.runner.JUnit4TestListener, là RunListener cho các thử nghiệm này. JUnit4TestListener mở rộng RunListener, nhưng không ghi đè lên testAssumptionFailure, đó có thể là lý do tại sao các thử nghiệm của bạn được chuyển vào Eclipse. RunListener.testAssumptionFailure là phương thức trống, không có gì, vì vậy thông báo của bạn sẽ bị bỏ qua.

Tôi sẽ bắt đầu bằng cách sao chép các repo git, nhập các dự án vào Eclipse và cố gắng làm việc thông qua mã.

2

Tải xuống các công cụ phát triển plugin plugin (PDT) cho Eclipse.

Bắt đầu một dự án plugin và add org.eclipse.jdt.internal.junit.runnerorg.eclipse.jdt.junit.core để dependancies của plugin.xml của bạn.

Khám phá các lớp đó và bạn sẽ biết được cách JUnit được khởi chạy. Nó không sử dụng Ant chút nào.

Để xem cách thất bại được đánh dấu và thao tác các báo cáo bạn nên nhìn vào org.eclipse.jdt.internal.junit4.runtime assumming bạn đang sử dụng JUnit 4.

Tóm lại, được chuẩn bị để dành trong khi học và phát triển một plugin nếu bạn muốn thay đổi cách JUnit của Eclipse hoạt động.

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