2011-07-26 36 views
10

Có cách nào để xác định một teardown khác nhau cho mỗi @Test trong jUnit không?Tách rời khác nhau cho mỗi @Test trong jUnit

+0

Tại sao không chỉ chú thích phương pháp teardown với '@ org.junit.After'? – Constantiner

+0

@Constantiner Bởi vì nó chỉ là một phương pháp Sau cho tất cả các xét nghiệm. Và tôi phải chạy cho mỗi bài kiểm tra riêng của mình. – Daniel

+1

@Daniel, Kiểm tra địa điểm trong các trường hợp thử nghiệm riêng biệt với các teardown chuyên dụng. – Constantiner

Trả lời

30

Sử dụng chú thích @After để chỉ ra (các) phương pháp sẽ chạy sau mỗi @Test.

Các bộ đầy đủ các chú thích như thế này là:

  • @BeforeClass - trước khi tất cả @Tests đang chạy
  • @Before - trước mỗi @Test đang chạy
  • @After - sau mỗi @Test đang chạy
  • @AfterClass - sau khi tất cả @Tests đang chạy

Tôi vừa nhận ra mình có thể chưa hiểu câu hỏi. Nếu bạn đang yêu cầu làm thế nào để kết hợp một phương pháp teardown đặc biệt đến một phương pháp @Test Đặc biệt, không có nhu cầu cho chú thích: Đơn giản chỉ cần gọi nó là ở phần cuối của phương pháp thử nghiệm của bạn trong một cuối cùng:

@Test 
public void someTest() { 
    try { 
     // test something 
    } finally { 
     someParticularTearDown(); 
    } 
} 
+1

Cảm ơn bạn. Đó là những gì tôi cần. – Daniel

+0

Đây không phải là chính xác tối ưu vì bạn sẽ phải lặp lại mã này cho mỗi phương pháp thử nghiệm. –

+0

Ví dụ cuối cùng chỉ để giải thích câu hỏi có thể - cá nhân tôi hiếm khi làm điều này, nhưng nó là lựa chọn đơn giản nhất mà tôi có thể nghĩ ra để có các phương pháp teardown khác nhau cho các @Tests khác nhau. – Bohemian

4

Mấu chốt của nhóm phương pháp thử nghiệm cùng nhau trong cùng một lớp là để họ có thể chia sẻ mọi thứ, bao gồm việc thiết lập và rách. Vì vậy, có, bạn có thể xác định teardowns riêng biệt cho mỗi bài kiểm tra, nhưng bạn làm như vậy bằng cách đặt các phương thức @Test trong các lớp khác nhau.

Khi bạn bắt đầu có các phương pháp tách riêng biệt, lý do lý do tại sao bạn muốn nhóm các thử nghiệm lại với nhau trong cùng một lớp không rõ ràng. Vì vậy, bạn có thể quản lý tình trạng này bằng cách linh hoạt về cách bạn nhóm các bài kiểm tra của bạn trong các lớp học.

+0

Có, thay vào đó hãy cân nhắc đặt mã thiết lập và xé xuống bên trong phương thức '@ Test' của bạn. Tuy nhiên, hãy cẩn thận rằng mã tear-down được gọi ngay cả khi một ngoại lệ được ném, bằng cách sử dụng 'try' ...' finally'. – Raedwald

+1

@Raedwald: vâng, cách tiếp cận của Bohemian là một cách để làm điều đó, nhưng bạn mất một số sức mạnh của khuôn khổ kể từ bây giờ bạn phải thêm một khối cuối cùng. –

1

Không có cách nào dễ dàng để thực hiện điều này trong JUnit. Với TestNG, bạn có thể đặt các phương thức của mình theo nhóm, vì vậy bạn có thể xác định @ BeforeMethod/@ AfterMethod cụ thể chỉ chạy quanh các nhóm nhất định.

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