Khôi phục câu hỏi cũ vì câu trả lời không cung cấp ví dụ.
Bạn có thể chỉ định thời gian chờ
mỗi phương pháp thử nghiệm:
@Test(timeout = 100) // Exception: test timed out after 100 milliseconds
public void test1() throws Exception {
Thread.sleep(200);
}
Đối với tất cả các phương pháp trong một lớp học thử nghiệm sử dụng Timeout
@Rule
:
@Rule
public Timeout timeout = new Timeout(100);
@Test // Exception: test timed out after 100 milliseconds
public void methodTimeout() throws Exception {
Thread.sleep(200);
}
@Test
public void methodInTime() throws Exception {
Thread.sleep(50);
}
toàn cầu cho tổng số thời gian để chạy tất cả các phương pháp thử s trong lớp sử dụng một tĩnh Timeout
@ClassRule
:
@ClassRule
public static Timeout classTimeout = new Timeout(200);
@Test
public void test1() throws Exception {
Thread.sleep(150);
}
@Test // InterruptedException: sleep interrupted
public void test2() throws Exception {
Thread.sleep(100);
}
Và thậm chí áp dụng thời gian chờ (hoặc @Rule
hoặc @ClassRule
) để all classes in your entire suite:
@RunWith(Suite.class)
@SuiteClasses({ Test1.class, Test2.class})
public class SuiteWithTimeout {
@ClassRule
public static Timeout classTimeout = new Timeout(1000);
@Rule
public Timeout timeout = new Timeout(100);
}
EDIT: timeout đã bị phản đối thời gian gần đây để sử dụng lần khởi tạo này
@Rule
public Timeout timeout = new Timeout(120000, TimeUnit.MILLISECONDS);
Bạn nên cung cấp Timeunit ngay bây giờ, vì điều này sẽ cung cấp chi tiết hơn cho mã của bạn.
Thời gian chờ '@ Rule' rất tuyệt. Thật đáng tiếc bạn không thể làm điều này trên một '@ Suite'. Hoặc bạn có thể? – avandeursen
Hmm. Thay vì thêm @Rule vào mọi lớp, tôi tự hỏi liệu có cách nào tương đối dễ dàng để thêm nó vào tất cả các lớp trong thời gian chạy không? –
@ Jun-DaiBates-Kobashigawa - Bạn có thể sử dụng một lớp cơ sở kiểm tra trường hợp tùy chỉnh như bạn đã từng làm với Junit 3. Không lý tưởng nhưng là một cách giải quyết tốt. –