2010-04-22 48 views
9

Tôi có một lớp học thử nghiệm mà tôi đang cố gắng để chạy từ một phương pháp chính với mã folowing:JUnitCore.runClasses không in bất cứ điều gì

Result r = org.junit.runner.JUnitCore.runClasses(TestReader.class); 

khi tôi kiểm tra các đối tượng Result Tôi có thể thấy rằng 5 kiểm tra đã được chạy nhưng không có gì được in trên màn hình.

Tôi có nên làm gì khác để có được đầu ra không?

Trả lời

3

Không có cách nào thực hiện điều này một cách rất rõ ràng, vì nó không phải là điều bình thường. Bạn chỉ cần in đầu ra nếu bạn đang tạo một chương trình có thể được sử dụng để chạy thử nghiệm trên dòng lệnh và JUnitCore tự thực hiện điều đó.

Tất cả các tùy chọn liên quan đến việc sử dụng các lớp học trong gói nội bộ.

Result r = JUnitCore.runMain(new RealSystem(), TestReader.class.getName()) 

Nếu bạn muốn in một cái gì đó khác hơn System.out, bạn có thể tạo lớp con của riêng bạn org.junit.internal.JUnitSystem và sử dụng thay vì RealSystem

Bạn cũng có thể sử dụng org.junit.internal.TextListener. Xem runMain(JUnitSystem system, String... args) trong the JUnitCore source để biết ví dụ.

+0

Can bạn ví dụ tại sao, "nó không phải là một điều phổ biến để làm". Gọi runClasses được mô tả trong sách dạy nấu ăn. Nếu có một cách khác để làm điều đó, nó là gì? – cmcginty

+0

Lần duy nhất bạn gọi 'runClasses()' là nếu bạn đang viết mã của riêng bạn để chạy thử nghiệm. Thông thường bạn có JUnitCore là lớp chính của bạn, chạy các kiểm tra mẫu IDE của bạn, hoặc sử dụng một cái gì đó mà được xây dựng trong hệ thống xây dựng của bạn để chạy các bài kiểm tra. Nếu bạn cần viết một lớp tùy chỉnh để chạy thử nghiệm của mình, cách thông thường là sử dụng org.junit.runner.notification.RunListener'. Cá nhân, tôi đã bực mình vì đã bao nhiêu lần tôi cần phải làm điều gì đó trong JUnit4 và tìm các lớp nội bộ để trở thành giải pháp duy nhất. – NamshubWriter

20

Có, bạn nên đăng ký TextListener như thế này:

JUnitCore junit = new JUnitCore(); 
    junit.addListener(new TextListener(System.out)); 
    junit.run(TestReader.class); 
+0

JUnit 4.11 không đi kèm với TextListener trong kho lưu trữ. Tôi phải làm gì trong trường hợp đó? – djangofan

+1

@djangofan: đó là org.junit.internal.TextListener, trong 4.11. –

+0

Phương thức 'runClasses (...)' tạo mới 'JUnitCore' để người nghe bị mất (xem [code in github] (https://github.com/junit-team/junit4/blob/a832c5afe5b0e7c2590d057a1a49a344d207f8a0/src /main/java/org/junit/runner/JUnitCore.java#L62)). Đó là lý do tại sao bạn nên sử dụng 'run()' thay thế. – ecerulm

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