2012-04-12 43 views
9

Tôi đang cố gắng gọi một bộ JUnit Test bằng cách sử dụng API. Tôi biết rằng bạn có thể sắp xếp các lớp thử nghiệm bằng cách sử dụng các mục sau:Làm thế nào để thực hiện chương trình một bộ thử nghiệm bằng cách sử dụng JUnit4 theo chương trình?

@RunWith(Suite.class) 
@Suite.SuiteClasses({ 
    Test1.class, 
    Test2.class, ... 
}) 

Nhưng, có cách nào để kích hoạt toàn bộ suite bằng API Java, sử dụng JUnitCore chẳng hạn?

Ví dụ, bạn có thể kích hoạt một thử nghiệm bằng cách sử dụng đoạn mã sau:

Runner r = 
try { 
    r = new BlockJUnit4ClassRunner(Class.forName(testClass)); 
} catch (ClassNotFoundException | InitializationError e) { 
    // handle 
} 
JUnitCore c = new JUnitCore(); 
c.run(Request.runner(r)); 

Cập nhật:

Từ API, có vẻ như lớp Suite chính nó là một Á hậu, vì thế mà mã sau dường như hoạt động:

Suite suite = new Suite(klass, new RunnerBuilder() { 
... // Implement methods 
}); 
JUnitCore c = new JUnitCore(); 
c.run(Request.runner(suite)); 

Nhưng tôi không chắc chắn nếu đây là phương pháp được đề xuất hoặc nếu có bất kỳ nhược điểm nào để viết anh ta ở trên mã.

Trả lời

12

Chỉ cần chỉ định tên của lớp bộ để JUnitCore:

Computer computer = new Computer(); 

JUnitCore jUnitCore = new JUnitCore(); 
jUnitCore.run(computer, MySuite.class); 
+0

Cảm ơn Matthew! Tôi chắc chắn sẽ thử. Trong thời gian chờ đợi, bạn có đề xuất cho đoạn mã trong bản cập nhật của tôi không? – Neel

4

Bạn cũng có thể rằng việc sử dụng dấu nhắc lệnh như

java tên lớp thử nghiệm org.junit.runner.JUnitCore

+5

Tôi không nghĩ rằng điều này đủ điều kiện là "theo lập trình". – oers

+1

Nó sẽ nếu bạn gọi nó bằng cách sử dụng runtime.exec –

+2

Hoặc JunitCore.main (testClassName) –

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