Tôi đang thử nghiệm và tôi đã nghe một số người nói sử dụng self.assertFalse
thay vì assert False
. Tại sao điều này và có bất kỳ lợi thế để có được?Những lợi thế hoặc sự khác biệt trong “khẳng định Sai” và “self.assertFalse”
Trả lời
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.
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,
assert
và self.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ị.
thay vì sử dụng 'tự.assertFalse (True) 'bạn có thể (và có lẽ nên) sử dụng' self.fail() '. – freaker
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.test và nose) 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.
- 1. Sự khác biệt giữa khẳng định và static_assert là gì?
- 2. Sự khác biệt giữa đối tượng khẳng định là gì = null và Assert.assertNotNull (đối tượng)?
- 3. Sự khác biệt giữa hoảng loạn và khẳng định là gì?
- 4. Sự khác biệt giữa "hoặc" và "||"
- 5. Sự khác biệt giữa giàn giáo mặc định và tiện lợi: giàn giáo?
- 6. Sự khác biệt giữa request.getSession(). GetId() và request.getSession (sai)?
- 7. xUnit hoặc NUnit? Những lợi thế và bất lợi của nhau?
- 8. sự khác biệt giữa những gì là [[], []] và [[]] * 2
- 9. Sự khác biệt giữa "% ~ dp0" và ". \"?
- 10. php - Sự khác biệt đúng hay sai? người
- 11. Sự khác biệt giữa và ý định và và setcontentview
- 12. Sự khác biệt và lợi thế của SurfaceView so với GLSurfaceView trên Android?
- 13. lợi thế jQuery/khác biệt trong .trigger() vs .click()
- 14. CMS hướng sự kiện - lợi thế và bất lợi
- 15. Những lợi thế của VistaDB
- 16. Sự khác biệt giữa Mealy và Moore
- 17. Có sự khác biệt nào giữa '=' và Trong?
- 18. Sự khác biệt giữa hiệp phương sai và Contra-phương sai
- 19. Sự khác biệt giữa ". +" Và ". +?"
- 20. sự khác biệt giữa 'và "trong JavaScript?
- 21. Sự khác biệt giữa destructor và finalizer?
- 22. Sự khác biệt giữa & (dấu và) và && hoặc | (ống) và || trong Objective-C?
- 23. Sự khác biệt giữa. và #
- 24. sự khác biệt giữa intent.setClass() và intent.setComponent()
- 25. những lợi thế của MVC3 trên MVC2
- 26. Castle Windsor hoặc Spring.NET - lợi thế và bất lợi
- 27. Sự khác biệt giữa! và !! trong yaml?
- 28. sự khác biệt giữa "void 0" và "không xác định"
- 29. Haskell (:) và (++) sự khác biệt
- 30. thử nghiệm và báo cáo khẳng định
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
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