Sự khác biệt giữa setUp () và setUpB BeforeClass ()


159

Khi kiểm tra đơn vị với JUnit, có hai phương thức tương tự setUp()setUpBeforeClass(). Sự khác biệt giữa các phương pháp này là gì? Ngoài ra, sự khác biệt giữa tearDown()và là tearDownAfterClass()gì?

Dưới đây là các chữ ký:

@BeforeClass
public static void setUpBeforeClass() throws Exception {
}

@AfterClass
public static void tearDownAfterClass() throws Exception {
}

@Before
public void setUp() throws Exception {
}

@After
public void tearDown() throws Exception {
}

Câu trả lời:


204

Các phương thức @BeforeClass@AfterClasschú thích sẽ được chạy chính xác một lần trong quá trình chạy thử của bạn - ngay từ đầu và cuối thử nghiệm nói chung, trước khi mọi thứ khác được chạy. Trong thực tế, chúng chạy trước khi lớp thử nghiệm thậm chí được xây dựng, đó là lý do tại sao chúng phải được khai báo static.

Các phương thức @Before@Aftersẽ được chạy trước và sau mỗi trường hợp thử nghiệm, vì vậy có thể sẽ được chạy nhiều lần trong khi chạy thử.

Vì vậy, giả sử bạn có ba bài kiểm tra trong lớp, thứ tự của các cuộc gọi phương thức sẽ là:

setUpBeforeClass()

  (Test class first instance constructed and the following methods called on it)
    setUp()
    test1()
    tearDown()

  (Test class second instance constructed and the following methods called on it)
    setUp()
    test2()
    tearDown()

  (Test class third instance constructed and the following methods called on it)
    setUp()
    test3()
    tearDown()

tearDownAfterClass()

15

Hãy nghĩ về "BeforeClass" như một trình khởi tạo tĩnh cho trường hợp thử nghiệm của bạn - sử dụng nó để khởi tạo dữ liệu tĩnh - những thứ không thay đổi trong các trường hợp thử nghiệm của bạn. Bạn chắc chắn muốn cẩn thận về các tài nguyên tĩnh không phải là luồng an toàn.

Cuối cùng, sử dụng phương thức chú thích "AfterClass" để dọn sạch mọi thiết lập bạn đã thực hiện trong phương thức chú thích "BeforeClass" (trừ khi tự hủy của chúng là đủ tốt).

"Trước" & "Sau" dành cho khởi tạo cụ thể kiểm tra đơn vị. Tôi thường sử dụng các phương thức này để khởi tạo / khởi tạo lại các giả định của các phụ thuộc của mình. Rõ ràng, việc khởi tạo này không dành riêng cho một bài kiểm tra đơn vị, nhưng chung cho tất cả các bài kiểm tra đơn vị.


BTW nếu bạn bắt đầu viết bài kiểm tra đơn vị, tôi muốn giới thiệu nồi này từ blog của tôi. Nó cũng có các tài liệu tuyệt vời khác về thử nghiệm đơn vị: madhurtanwani.blogspot.com/search/label/mock
madhurtanwani

7

setUpB BeforeClass được chạy trước bất kỳ phương thức thực thi nào ngay sau hàm tạo (chỉ chạy một lần)

setUp được chạy trước mỗi lần thực thi phương thức

tornDown được chạy sau mỗi lần thực thi phương thức

tornDownAfterClass được chạy sau tất cả các lần thực thi phương thức khác, là phương thức cuối cùng được thực thi. (chỉ chạy một lần bộ giải mã)


5

Từ Javadoc :

Đôi khi một số thử nghiệm cần chia sẻ thiết lập đắt tiền tính toán (như đăng nhập vào cơ sở dữ liệu). Trong khi điều này có thể làm mất tính độc lập của các bài kiểm tra, đôi khi nó là một sự tối ưu hóa cần thiết. Chú thích một public static voidphương thức không có đối số với @BeforeClassnguyên nhân khiến nó được chạy một lần trước bất kỳ phương thức kiểm tra nào trong lớp. Các @BeforeClassphương thức của siêu lớp sẽ được chạy trước các lớp hiện tại.


Sự khác biệt là setUpB BeforeClass được chạy trước bất kỳ thử nghiệm nào và được chạy một lần; setUp được chạy một lần trước mỗi lần kiểm tra (và thường được sử dụng để đặt lại trạng thái kiểm tra về giá trị đã biết giữa các lần kiểm tra).
Cú pháp
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.