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 để
Trả lời
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.
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
@Dominix, Chỉ cần khẳng địnhCâu hỏi thường gặp. – falsetru
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
- 1. Kiểm tra đơn vị - Làm thế nào để tiếp tục?
- 2. Hadoop: Làm thế nào để kiểm tra đơn vị FileSystem
- 3. Làm thế nào để kiểm tra đơn vị IDisposable?
- 4. Làm thế nào để bạn kiểm tra đơn vị?
- 5. Python: Làm cách nào để đơn vị kiểm tra chức năng lồng nhau?
- 6. Làm thế nào để viết bài kiểm tra đơn vị kiểm tra bất biến đồng thời
- 7. Bài kiểm tra đơn vị bằng Python
- 8. Đơn vị Kiểm tra tệp tải lên, làm cách nào?
- 9. Nơi để kiểm tra đơn vị?
- 10. DAO Kiểm tra đơn vị
- 11. Đơn vị kiểm tra destructors?
- 12. Cách đơn giản nhất để kiểm tra đơn vị Mã C bằng Python
- 13. Đơn vị kiểm tra TSQL
- 14. Kiểm tra đơn vị - Những gì không để kiểm tra
- 15. Tư vấn kiểm tra đơn vị - cách kiểm tra đơn vị của bạn .asmx
- 16. Làm thế nào để có được kết quả kiểm tra đơn vị kiểm tra trong Eclipse + Pydev?
- 17. Kiểm tra đơn vị EJB
- 18. Kiểm tra đơn vị XSLT
- 19. Mock UdpClient để kiểm tra đơn vị
- 20. Kiểm tra đơn vị XQuery
- 21. Kiểm tra đơn vị XCode
- 22. Viết bài kiểm tra đơn vị ở Django/Python
- 23. Đơn vị kiểm tra RedirectToRouteResult
- 24. Python, kiểm tra đơn vị và nhập khẩu mocking
- 25. Mới để kiểm tra đơn vị
- 26. Tham số các bài kiểm tra đơn vị trong python
- 27. Khung kiểm tra đơn vị C nào?
- 28. Có cách nào để kiểm tra đơn vị mã Gtk/GLib được viết bằng Python không?
- 29. Đơn vị kiểm tra giao diện trong Python
- 30. Kiểm tra đơn vị CacheManager
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 *. –
Cảm ơn Florian vì đã giúp tôi hiểu cách sử dụng đúng đắn của assertRaises() – Dominix