2013-06-13 51 views
6

Tôi mới dùng Github. Tôi mới viết bài kiểm tra đơn vị. Tôi đã đóng góp cho một dự án nhưng chủ sở hữu đã yêu cầu tôi cung cấp các đơn vị testcases thất bại trước khi sửa chữa và làm việc sau khi sửa chữa. Làm thế nào tôi có thể đi về làm việc đó? Tôi sẽ viết tất cả chúng lại với nhau? Tại một thời điểm tôi sẽ có một bản sao của mã (tức là có sửa chữa hoặc không sửa chữa). Tôi đang sử dụng Python và nhập unittest. Tôi bị bối rối. Trước khi sửa chữa tôi nhận được một ngoại lệ vì vậy tôi nên sử dụng assertRaises() cho điều đó. Tôi đã đọc rất nhiều nhưng không thể bắt đầu.kiểm tra đơn vị python cách làm thế nào để

+1

Không cần sử dụng 'assertRaises': Bài kiểm tra * được cho là thất bại * đối với mã cũ, do đó một' assertEqual' đơn giản (hoặc một trong các kiểm tra khác) là đúng cách để đi. Bạn chỉ cần sử dụng 'assertRaises' nếu bạn muốn kiểm tra xem một hàm có xử lý lỗi chính xác hay không (ví dụ: liệu hàm có ném đúng ngoại lệ khi cung cấp đầu vào không hợp lệ) hay không. Nói chung, bạn * luôn khẳng định hành vi đúng *. –

+0

Cảm ơn Florian vì đã giúp tôi hiểu cách sử dụng đúng đắn của assertRaises() – Dominix

Trả lời

5

Giả sử bạn có một sửa chữa cho sau gãy delta chức năng:

bị hỏng phiên bản:

def delta(a, b): 
    return a - b 

cố định phiên bản:

def delta(a, b): 
    return abs(a - b) 

Sau đó, cung cấp sau testcase. Nó sẽ thất bại với phiên bản bị hỏng, và làm việc với phiên bản cố định.

import unittest 

from module_you_fixed import delta 

class TestDelta(unittest.TestCase): 
    def test_delta(self): 
     self.assertEqual(delta(9, 7), 2) 
     self.assertEqual(delta(2, 5), 3) 

if __name__ == '__main__': 
    unittest.main() 

Tôi giả định dự án sử dụng mô-đun không có thư viện chuẩn. Bạn nên sử dụng khung mà dự án sử dụng.

+0

Ví dụ hoàn hảo không đúng. Ba Chúc mừng. Chỉ có một điều: Tôi đã nghĩ đến việc viết hai tập tin như vậy một với assertsequal() cho một cố định và một với assertRaises() cho ngoại lệ (bị hỏng một). Nhưng tôi nghĩ rằng sau khi nhìn thấy câu trả lời của bạn, tôi có thể chỉ cần đi trước với một tập tin và chỉ có assertsEqual. Bây giờ người bị hỏng sẽ thất bại và sau đó cố định một sẽ vượt qua. Là nó chấp nhận được như vậy hoặc tôi cần phải viết 2 tập tin và vượt qua cả hai bài kiểm tra trong cố định một (với assertsEqual) và cũng vượt qua một trong những bị hỏng (bằng cách sử dụng assertRaises)? Anyways +1 cho câu trả lời của bạn. – Dominix

+0

@Dominix, Chỉ cần khẳng địnhCâu hỏi thường gặp. – falsetru

+0

Khi tôi sử dụng assertEqual() và thử nghiệm đầu tiên không thành công, tôi có nghĩa là nói lệnh gọi self.assertEqual (delta (9, 7), 2) so với khi nó không phải thực hiện dòng tiếp theo. Làm thế nào tôi có thể làm cho nó thực hiện cho mỗi trường hợp thử nghiệm và in FAIL cho tất cả hơn là chỉ thất bại cho một và sắp ra – Dominix

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