2013-06-07 50 views
13

Khi tôi tạo một unittest.TestCase, tôi có thể xác định hàm setUp() sẽ chạy trước mỗi thử nghiệm trong trường hợp kiểm tra đó. Có thể bỏ qua setUp() cho một thử nghiệm cụ thể không?Có thể bỏ qua setUp() cho một thử nghiệm cụ thể trong python's unittest không?

Có thể muốn bỏ qua setUp() cho một thử nghiệm nhất định không phải là phương pháp hay. Tôi khá mới để kiểm tra đơn vị và bất kỳ đề nghị liên quan đến chủ đề được chào đón.

+0

Ví dụ về trường hợp sử dụng: Tôi đang thử nghiệm chức năng một ứng dụng sử dụng API bên ngoài. Gần như mọi phương thức đều yêu cầu 'setUp()' để xác thực với máy chủ, ngoại trừ nếu tôi đã thử nghiệm hàm 'login()'. –

+0

Liên quan đến [softwareengineering.se]: [* Có thể thiết lập và xé rách các phương thức chỉ chạy cho các unittests cụ thể không? *] (Https://softwareengineering.stackexchange.com/q/232243/168744) –

Trả lời

8

Từ (mỏ nghiêng) docs:

unittest.TestCase.setUp()

Phương pháp gọi là để chuẩn bị ghép đo. Điều này được gọi ngay trước khi gọi phương thức thử nghiệm; bất kỳ ngoại lệ nào được nêu ra bởi phương pháp này sẽ được coi là lỗi thay vì lỗi kiểm tra. Việc triển khai mặc định không làm gì cả.

Vì vậy, nếu bạn không cần thiết lập thì đừng ghi đè unittest.TestCase.setUp.

Tuy nhiên, nếu một trong các phương pháp test_* của bạn không cần thiết lập và các phương thức khác thực hiện, tôi khuyên bạn nên đặt nó trong một lớp riêng biệt.

+1

tôi tin @ 7hi4g0 có 5 bài kiểm tra, và trong số 5 bài kiểm tra đó, anh ấy không muốn thiết lập chạy trên một trong số đó. INSTEAD viết hai bài kiểm tra riêng biệt, một với thiết lập một mà không có – TehTris

+0

@TehTris: Trong trường hợp đó, nó phải là một trường hợp thử nghiệm riêng biệt và không được trộn lẫn với những người khác. –

+0

tôi đồng ý 100%, nhưng tôi chắc chắn có ít nhất một lý do hợp pháp ngoài đó để có thể thực hiện được điều này. – TehTris

6

Trong setUp(), self._testMethodName chứa tên của thử nghiệm sẽ được thực thi. Tốt hơn hết là nên đưa bài kiểm tra vào một lớp khác hoặc một thứ gì đó, tất nhiên, nhưng nó ở trong đó.