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

Kiểm thử trong Python dùng module doctest

Chúng ta biết docstring cung cấp thông tin thêm về hàm và class trong Python. Chúng ta cũng có thể dùng nó để kiểm thử hàm dùng module doctest. Module doctest thực thi code bắt đầu bằng >>> và so sánh với output kỳ vọng.

Các bước viết hàm với doctest:

  • Import module doctest.
  • Viết hàm với docstring. Bên trong docstring, viết 2 dòng sau để test hàm:
    • >>> function_name(*args).
    • Output kỳ vọng.
  • Viết code hàm.
  • Gọi doctest.testmod(name='function_name', verbose=True) để test. Không thấy kết quả test nếu verbose=False và tất cả test pass. Nên đặt True.

Ví dụ

Viết hàm đơn giản với doctest.

# Import module
import doctest

# Hàm
def numbers_sum(*args) -> int:
    """
    Hàm này trả về tổng tất cả tham số
    Lệnh shell để test:
    >>> numbers_sum(1, 2, 3, 4, 5)
    15
    >>> numbers_sum(6, 7, 8)
    21
    """
    return sum(args)

# Gọi testmod
doctest.testmod(name='numbers_sum', verbose=True)

Nếu chạy code trên, kết quả:

Trying: numbers_sum(1, 2, 3, 4, 5)
Expecting: 15
ok
Trying: numbers_sum(6, 7, 8)
Expecting: 21
ok
1 items had no tests: numbers_sum
1 items passed all tests: 2 tests in numbers_sum.numbers_sum
2 tests in 2 items. 2 passed and 0 failed.
Test passed.
TestResults(failed=0, attempted=2)

Output có từ "ok" sau mỗi test. Nghĩa là output kỳ vọng và thực tế khớp. Kiểm tra kết quả test cuối output.

Ví dụ

Xem điều gì xảy ra khi test fail. Chạy ví dụ tương tự với output sai.

import doctest

def numbers_sum(*args) -> int:
    """
    Hàm này trả về tổng tất cả tham số
    Lệnh shell để test:
    >>> numbers_sum(1, 2, 3, 4, 5)
    10
    >>> numbers_sum(6, 7, 8)
    23
    """
    return sum(args)

doctest.testmod(name='numbers_sum', verbose=True)

Kết quả

Thực thi chương trình trên cho kết quả:

Trying: numbers_sum(1, 2, 3, 4, 5)
Expecting: 10
**********************************************************************
File "__main__", line 10, in numbers_sum.numbers_sum
Failed example: numbers_sum(1, 2, 3, 4, 5)
Expected: 10
Got: 15
Trying: numbers_sum(6, 7, 8)
Expecting: 23
**********************************************************************
File "__main__", line 12, in numbers_sum.numbers_sum
Failed example: numbers_sum(6, 7, 8)
Expected: 23
Got: 21
1 items had no tests: numbers_sum
**********************************************************************
1 items had failures: 2 of 2 in numbers_sum.numbers_sum
2 tests in 2 items. 0 passed and 2 failed.
***Test Failed***
2 failures.
TestResults(failed=2, attempted=2)

Kết quả test: 2 failed. Cũng xem được expected và actual output trong output.

Kết luận

Nếu có thắc mắc, hãy đề cập ở phần comment.