2010-06-02 23 views

Trả lời

20

assert False ném ngoại lệ mà không có thông tin đăng nhập hữu ích. Thử nghiệm có lỗi.

self.assertFalse() ném ngoại lệ lỗi kiểm tra với thông tin lỗi kiểm tra như thông báo và tên thử nghiệm.

Có sự khác biệt giữa lỗi - kiểm tra thậm chí không thể chạy - và mã kiểm tra thất bại đã hoạt động nhưng đã tạo ra câu trả lời sai.

Lỗi là vấn đề nghiêm trọng với mã của bạn.

Thất bại chỉ là lỗi mà cần phải sửa.

+0

Xin cảm ơn, điều này rất hữu ích để biết, tôi sẽ cần xóa các dòng 'assert False'. +1 – chrissygormley

+1

Xin chào, điều này có vẻ sai. Á hậu thử nghiệm nên (và không) nắm bắt 'AssertionError' và báo cáo chúng một cách chính xác như thất bại kiểm tra. – wim

33

Nếu bạn chạy

import unittest 

class Test_Unittest(unittest.TestCase): 
    def test_assert(self): 
     assert False 
    def test_assertFalse(self): 
     self.assertFalse(True) 

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

Bạn nhận được các thông tin đăng nhập cùng, sự thất bại tương tự:

FF 
====================================================================== 
FAIL: test_assert (__main__.Test_Unittest) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "/home/unutbu/pybin/test.py", line 6, in test_assert 
    assert False 
AssertionError 

====================================================================== 
FAIL: test_assertFalse (__main__.Test_Unittest) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "/home/unutbu/pybin/test.py", line 8, in test_assertFalse 
    self.assertFalse(True) 
AssertionError 

---------------------------------------------------------------------- 
Ran 2 tests in 0.000s 

FAILED (failures=2) 

Lý do cả hai đều xử lý như nhau là vì unittest.TestCase định nghĩa

failureException = AssertionError 

Khi bạn nói assert False một AssertionError được nâng lên.

Khi bạn nói self.assertFalse(True), số failureExeception được nâng lên.

Vì các trường hợp ngoại lệ này giống nhau, không có sự khác biệt rõ ràng. Tuy nhiên,

assertself.assertFalse khác nhau về cách sử dụng thông thường.

assert được sử dụng để tuyên bố rằng một điều kiện nhất định phải được giữ tại một điểm nhất định trong mã. Nó được sử dụng như một cái nạng trong quá trình phát triển, nhưng không có nghĩa là được sử dụng trong mã sản xuất. Nếu bạn chạy python -O my_unittest.py, tất cả các câu lệnh khẳng định sẽ bị bỏ qua. Điều đó sẽ làm hỏng mục đích sử dụng của bạn là assert, có thể làm cho các bài kiểm tra đơn vị của bạn vượt qua ngay cả khi có lỗi.

Mặc dù (không có cờ -O) kết quả là như nhau, assert không có nghĩa là được sử dụng trong mã kiểm tra đơn vị. Sử dụng self.assertTrue hoặc self.assertFalse khi viết kiểm tra đơn vị.

+0

thay vì sử dụng 'tự.assertFalse (True) 'bạn có thể (và có lẽ nên) sử dụng' self.fail() '. – freaker

10

Một điểm câu trả lời cho đến nay đã thất bại trong việc đề cập đến là có một số khuôn khổ kiểm tra (ví dụ py.testnose) rằng việc sử dụng python của mẫn kỳ diệu để cho phép bạn viết bài kiểm tra đơn vị như sau:

# test_this_and_that.py 
def test_frobber(): 
    assert frobber('x') == 'y' 
# EOF 

không yêu cầu bất kỳ bản mẫu soạn thảo nào mà bạn thấy ở trên. Vì vậy, trong một số trường hợp, nó có thể đun sôi xuống chỉ là một vấn đề framwork/phong cách.

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