Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Unit Testing trong Python với Unittest


Trong bài viết này, chúng ta sẽ tìm hiểu về nguyên tắc cơ bản của kiểm thử phần mềm (software testing) với sự giúp đỡ của module unittest có sẵn trong Python 3.x hoặc trước đó. Nó cho phép tự động hóa, chia sẻ mã thiết lập (setup) và thoát (teardown) cho các bài kiểm tra, và các bài kiểm tra độc lập cho mọi framework.

Trong unit test, chúng ta sử dụng nhiều khái niệm hướng đối tượng. Chúng ta sẽ thảo luận một số khái niệm chính được sử dụng nhiều nhất ở đây.

  • Testcase – Là lớp cơ sở phản hồi cụ thể theo một tập hợp đầu vào cho trước. Chúng ta sử dụng lớp cơ sở của unittest là TestCase để triển khai hoạt động này.
  • Testsuite – Được dùng để gom các test case lại với nhau và thực thi chúng cùng lúc.
  • Testrunner – Theo dõi thực thi dựa trên kết quả. Nó tham gia hiển thị kết quả sau khi thực thi các tác vụ.
  • Testfixture – Phục vụ làm cơ sở (baseline) cho các test case trong môi trường liên quan.

Bây giờ hãy xem một ví dụ cơ bản để thấy unit testing hoạt động như thế nào.

Ví dụ

import unittest
class TestStringMethods(unittest.TestCase):
    def test_upper(self):
        self.assertEqual('TUTOR'.lower(), 'tutor')
    def test_islower(self):
        self.assertTrue('tutor'.islower())
        self.assertFalse('Tutor'.islower())
if __name__ == '__main__':
    unittest.main()

Kết quả

...
-------------------------------
Ran 2 tests in 0.000s
OK

Unit Testing trong Python với Unittest

Ở đây chúng ta kế thừa lớp unit test dưới dạng kế thừa đơn (single inheritance). Ở đây chúng ta sử dụng các phương thức tích hợp sẵn như assertEqual(), assertTrue() & assertFalse().

  • assertEqual() được dùng để xác thực/so sánh đầu ra với kết quả.
  • assertTrue() được dùng để xác minh điều kiện cho trước có True hay không.
  • assertFalse() được dùng để xác minh điều kiện cho trước có False hay không.

Đầu ra của mã trên có thể ở ba dạng:

  • OK – Cho thấy tất cả các test tạo ra đã thực thi thành công.
  • FAIL – Cho thấy test case thất bại và ngoại lệ AssertionError được ném ra.
  • ERROR – Cho thấy test ném ra một ngoại lệ/lỗi.

Chúng ta có thể sử dụng decorator @unittest.skip(<reason>) để bỏ qua test.

Ví dụ bỏ qua test

import unittest
class TestString(unittest.TestCase):
    @unittest.skip("check skipped tests")
    def test_upper(self):
        self.assertEqual('TUTOR'.lower(), 'tutor')
    def test_islower(self):
        self.assertTrue('tutor'.islower())
        self.assertFalse('Tutor'.islower())
if __name__ == '__main__':
    unittest.main()

Kết quả

...
------------------------------------------
Ran 2 tests in 0.000s
OK (skipped=2)

Kết luận

Trong bài viết này, chúng ta đã học về Unit Testing trong Python sử dụng module Unittest trong Python 3.x hoặc trước đó.