เรารู้ว่า docstring ให้ข้อมูลเพิ่มเติมเกี่ยวกับฟังก์ชันและคลาสใน Python เราสามารถใช้มันสำหรับการทดสอบฟังก์ชันโดยใช้โมดูล doctest โมดูล doctest จะรันโค้ดที่ขึ้นต้นด้วย >>> และเปรียบเทียบกับผลลัพธ์ที่คาดหวัง
ทำตามขั้นตอนด้านล่างเพื่อเขียนฟังก์ชันพร้อม doctest
นำเข้าโมดูล doctest
เขียนฟังก์ชันพร้อม docstring ภายใน docstring ให้เขียนสองบรรทัดต่อไปนี้สำหรับการทดสอบฟังก์ชันเดียวกัน
>>> function_name(*args).
ผลลัพธ์ที่ คาดหวัง.
เขียนโค้ดฟังก์ชัน
ตอนนี้ เรียกฟังก์ชัน doctest.testmod(name='function_name', verbose=True) สำหรับการทดสอบ เราไม่เห็นผลลัพธ์การทดสอบถ้า verbose ตั้งเป็น False และการทดสอบทั้งหมดผ่าน ควรตั้งเป็น True
ตัวอย่าง
ลองเขียนฟังก์ชันง่ายๆ พร้อม doctest
# นำเข้าโมดูล
import doctest
# ฟังก์ชัน
def numbers_sum(*args) -> int:
"""
This function returns the sum of all the arguments
Shell commands for testing
invoking the function followed by expected output:
>>> numbers_sum(1, 2, 3, 4, 5)
15
>>> numbers_sum(6, 7, 8)
21
"""
return sum(args)
# เรียกฟังก์ชัน testmod
doctest.testmod(name='numbers_sum', verbose=True)
ถ้าคุณรันโค้ดข้างต้น คุณจะได้ผลลัพธ์ดังนี้
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)
ถ้าคุณดูผลลัพธ์ จะมีคำว่า ok หลังการทดสอบแต่ละครั้ง หมายความว่าผลลัพธ์ที่คาดหวังและผลลัพธ์จริงตรงกัน คุณสามารถตรวจสอบผลลัพธ์การทดสอบที่ท้ายของผลลัพธ์ได้
ตัวอย่าง
ลองดูสิ่งที่เกิดขึ้นเมื่อการทดสอบล้มเหลว รันตัวอย่างเดียวกันแต่กับผลลัพธ์ที่ผิด
# นำเข้าโมดูล
import doctest
# ฟังก์ชัน
def numbers_sum(*args) -> int:
"""
This function returns the sum of all the arguments
Shell commands for testing
invoking the function followed by expected output:
>>> numbers_sum(1, 2, 3, 4, 5)
10
>>> numbers_sum(6, 7, 8)
23
"""
return sum(args)
# เรียกฟังก์ชัน testmod
doctest.testmod(name='numbers_sum', verbose=True)
ผลลัพธ์
ถ้าคุณรันโปรแกรมข้างต้น คุณจะได้ผลลัพธ์ดังนี้
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)
ถ้าคุณดูผลลัพธ์การทดสอบ 2 รายการล้มเหลว คุณยังสามารถตรวจสอบ expected และ actual output ในผลลัพธ์ได้
สรุป
หากคุณมีข้อสงสัยในบทช่วยสอนนี้ ให้ระบุในส่วนความคิดเห็น