Giải thích các phương thức Python “setUp” và “dropsDown” được sử dụng trong các trường hợp thử nghiệm


93

Có ai có thể giải thích cách sử dụng của Python setUptearDowncác phương thức trong khi viết các trường hợp thử nghiệm ngoài việc nó setUpđược gọi ngay trước khi gọi phương thức thử nghiệm và tearDownđược gọi ngay sau khi nó được gọi không?

Câu trả lời:


85

Nói chung, bạn thêm tất cả các bước tiên quyết để setUp và tất cả các bước dọn dẹp để xé bỏ.

Bạn có thể đọc thêm với các ví dụ ở đây .

Khi một phương thức setUp () được xác định, người chạy thử nghiệm sẽ chạy phương thức đó trước mỗi lần thử nghiệm. Tương tự như vậy, nếu một phương thức dropsDown () được xác định, người chạy thử nghiệm sẽ gọi phương thức đó sau mỗi lần thử nghiệm.

Ví dụ: bạn có một bài kiểm tra yêu cầu các mục phải tồn tại hoặc một trạng thái nhất định - vì vậy bạn đặt các hành động này (tạo các thể hiện đối tượng, khởi tạo db, chuẩn bị các quy tắc, v.v.) vào setUp.

Cũng như bạn biết, mỗi bài kiểm tra nên dừng lại ở nơi nó được bắt đầu - điều này có nghĩa là chúng tôi phải khôi phục trạng thái ứng dụng về trạng thái ban đầu - ví dụ: đóng tệp, kết nối, xóa các mục mới tạo, gọi lại các giao dịch, v.v. - tất cả những điều này các bước sẽ được bao gồm trong xé nhỏ.

Vì vậy, ý tưởng là bản thân thử nghiệm chỉ nên chứa các hành động được thực hiện trên đối tượng thử nghiệm để nhận được kết quả, trong khi setUp và dropsDown là các phương pháp giúp bạn giữ cho mã thử nghiệm của mình sạch sẽ và linh hoạt.

Bạn có thể tạo setUp và dropsDown cho một loạt các bài kiểm tra và xác định chúng trong một lớp cha - vì vậy, bạn sẽ dễ dàng hỗ trợ các bài kiểm tra đó và cập nhật các bước chuẩn bị và dọn dẹp thông thường.

Nếu bạn đang tìm kiếm một ví dụ đơn giản, vui lòng sử dụng liên kết sau với ví dụ


53

Bạn có thể sử dụng các mã này để xác định mã phổ biến cho tất cả các thử nghiệm trong bộ thử nghiệm.

Nếu bạn có nhiều mã lặp lại trong các bài kiểm tra của mình, bạn có thể làm cho chúng ngắn hơn bằng cách di chuyển mã này sang setUp / dropsDown.

Bạn có thể sử dụng điều này để tạo dữ liệu thử nghiệm (ví dụ: thiết lập hàng giả / giả mạo) hoặc khai thác các chức năng bằng hàng giả.

Nếu bạn đang thực hiện kiểm tra tích hợp, bạn có thể sử dụng kiểm tra điều kiện môi trường trước trong setUp và bỏ qua kiểm tra nếu có điều gì đó không được thiết lập đúng cách.

Ví dụ:

class TurretTest(unittest.TestCase):

    def setUp(self):
        self.turret_factory = TurretFactory()
        self.turret = self.turret_factory.CreateTurret()

    def test_turret_is_on_by_default(self):
        self.assertEquals(True, self.turret.is_on())

    def test_turret_turns_can_be_turned_off(self):
        self.turret.turn_off()
        self.assertEquals(False, self.turret.is_on())

16
+1 vì 9 dòng mã là tất cả những gì tôi cần để tìm hiểu 100%. Ví dụ thanh lịch, ngắn gọn. Thành thật mà nói, 9 dòng đó là thứ duy nhất tôi đọc được trên trang ngoài câu hỏi, cũng là câu hỏi của tôi. Bạn có nói điều gì đó bằng tiếng Anh trước mẫu mã không? Nó không cần thiết! Mật mã đã nói lên tất cả! Cảm ơn Matt.
Nathan C. Tresch

2
Tôi không rõ "bỏ qua bài kiểm tra nếu điều gì đó không được thiết lập đúng cách" được trình bày ở đây. Hay đó chỉ là một bên?
user5359531

6

Giả sử bạn có một bộ với 10 bài kiểm tra. 8 trong số các thử nghiệm chia sẻ cùng một mã thiết lập / xé nhỏ. 2 cái còn lại thì không.

thiết lập và chia nhỏ cung cấp cho bạn một cách hay để cấu trúc lại 8 bài kiểm tra đó. Bây giờ bạn làm gì với 2 bài kiểm tra còn lại? Bạn sẽ chuyển chúng sang testcase / suite khác. Vì vậy, sử dụng thiết lập và chia nhỏ cũng giúp cung cấp một cách tự nhiên để chia các bài kiểm tra thành các trường hợp / bộ


1
Đôi khi không mong muốn chuyển các bài kiểm tra sang một testcase khác. Trong trường hợp này, bạn có thể viết một trình trang trí với mã thiết lập / xé nhỏ và chỉ trang trí các chức năng thử nghiệm mong muốn.
Matthijs

2
Đây hoàn toàn không phải là câu trả lời cho câu hỏi.
gented
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.