ในบทช่วยสอนนี้ เราจะเรียนรู้เกี่ยวกับการทดสอบหน่วย โดยใช้ unittest โมดูลในตัว การทดสอบมีบทบาทสำคัญในการพัฒนาซอฟต์แวร์ คุณจะทราบปัญหาก่อนที่จะเข้าสู่การผลิตเอง
เราจะเรียนรู้พื้นฐานของการทดสอบใน Python โดยใช้โมดูลในตัวที่เรียกว่า unittest . เข้าสู่บทแนะนำกันเลย
การทดสอบหน่วยคืออะไร
หากคุณใช้ระบบเข้าสู่ระบบเป็นตัวอย่าง แต่ละช่องในแบบฟอร์มการเข้าสู่ระบบคือหน่วย/ส่วนประกอบ และการทดสอบการทำงานของหน่วย/ส่วนประกอบเหล่านั้นเรียกว่า การทดสอบหน่วย
ตัวอย่าง
มาดูโครงสร้างพื้นฐานของ unittest framework กัน
# การนำเข้า unittest moduleimport unittest# unittest จะทดสอบวิธีการทั้งหมดที่ชื่อขึ้นต้นด้วย 'test'class SampleTest(unittest.TestCase):# return True หรือ False def test(self):self.assertTrue(True)# รัน testunittest.main()
ผลลัพธ์
หากคุณเรียกใช้โปรแกรมข้างต้น คุณจะได้ผลลัพธ์ดังต่อไปนี้
<ก่อนหน้า>------------------------------------------------------------- ----------------------- ทดสอบรัน 1 ใน 0.001sOK2.การทดสอบวิธีสตริง
ตอนนี้ เราจะทดสอบวิธีสตริงแบบต่างๆ กับกรณีทดสอบตัวอย่าง โปรดจำไว้ว่าชื่อเมธอดต้องขึ้นต้นด้วย การทดสอบ
มาดู Intro สั้นๆ ของแต่ละวิธีที่เราจะเขียนกัน
-
test_string_equality
-
เมธอดนี้จะทดสอบว่าสองสตริงเท่ากันหรือไม่โดยใช้ asserEqaul วิธีการของ unittest.TestCase
-
-
test_string_case
-
เมธอดนี้ทดสอบว่ากรณีสตริงสองกรณีเท่ากันหรือไม่โดยใช้ asserEqaul วิธีการของ unittest.TestCase
-
-
test_is_string_upper
-
เมธอดนี้จะทดสอบว่าสตริงเป็นตัวพิมพ์ใหญ่หรือไม่โดยใช้ asserTrue และ ยืนยันเท็จ วิธีการของ unittest.TestCase .
-
ตัวอย่าง
# กำลังนำเข้า unittest moduleimport unittestclass TestingStringMethods(unittest.TestCase):# string equal def test_string_equality(self):# หากอาร์กิวเมนต์ทั้งสองเท่ากันก็จะสำเร็จ self.assertEqual('ttp' * 5, 'ttpttpttpttpttp') # เปรียบเทียบ สองสตริง def test_string_case(ตัวเอง):# หากอาร์กิวเมนต์ทั้งสองเท่ากันก็จะสำเร็จ self.assertEqual('tutorialspoint'.upper(), 'TUTORIALSPOINT') # ตรวจสอบว่าสตริงนั้นอยู่ด้านบนหรือไม่ def test_is_string_upper (ตัวเอง):# ใช้แล้ว เพื่อตรวจสอบว่าคำสั่งนั้นเป็นจริงหรือเท็จ # ผลลัพธ์ของนิพจน์ภายใน **assertTrue** จะต้องเป็น True เพื่อผ่านกรณีทดสอบ # ผลลัพธ์ของนิพจน์ภายใน **assertFalse** จะต้องเป็นเท็จจึงจะผ่านการทดสอบด้วยตนเอง .assertTrue('TUTORIALSPOINT'.isupper()) self.assertFalse('TUTORIALSpoint'.isupper())# รัน testunittest.main()
ผลลัพธ์
หากคุณเรียกใช้โค้ดข้างต้น คุณจะได้ผลลัพธ์ต่อไปนี้หากผ่านการทดสอบทุกกรณี
<ก่อนหน้า>...--------------------------------------------- -------------------------- รัน 3 การทดสอบใน 0.001sOKตัวอย่าง
เรียกใช้โปรแกรมต่อไปนี้เพื่อดูผลลัพธ์ของกรณีทดสอบที่ล้มเหลว
# กำลังนำเข้า unittest moduleimport unittestclass TestingStringMethods(unittest.TestCase):# string equal def test_string_equality(self):# หากอาร์กิวเมนต์ทั้งสองเท่ากันก็จะสำเร็จ self.assertEqual('ttp' * 5, 'ttpttpttpttpttp') # เปรียบเทียบ สองสตริง def test_string_case(ตัวเอง):# หากอาร์กิวเมนต์ทั้งสองเท่ากันก็จะสำเร็จ self.assertEqual('tutorialspoint'.upper(), 'TUTORIALSPOINT') # ตรวจสอบว่าสตริงนั้นอยู่ด้านบนหรือไม่ def test_is_string_upper (ตัวเอง):# ใช้แล้ว เพื่อตรวจสอบว่าคำสั่งนั้นเป็นจริงหรือเท็จ # ผลลัพธ์ของนิพจน์ภายใน **assertTrue** จะต้องเป็น True เพื่อผ่านกรณีทดสอบ # ผลลัพธ์ของนิพจน์ภายใน **assertFalse** จะต้องเป็นเท็จจึงจะผ่านการทดสอบด้วยตนเอง .assertTrue('TUTORIALSPOINt'.isupper()) self.assertFalse('TUTORIALSpoint'.isupper())# รัน testunittest.main()
ผลลัพธ์
หากคุณเรียกใช้โปรแกรมข้างต้น คุณจะได้ผลลัพธ์ดังต่อไปนี้
<ก่อนหน้า>=====================================================================ล้มเหลว:test_is_string_upper (__main__.TestingStringMethods) -------------------- -------------------------------------------------- -Traceback (การโทรล่าสุดครั้งล่าสุด):ไฟล์ "p:/Python Work/Stopwatch/practice.py" บรรทัดที่ 21 ใน test_is_string_upperself.assertTrue('TUTORIALSPOINt'.isupper())AssertionError:เท็จไม่เป็นความจริง ---- -------------------------------------------------- ----------------รัน 3 การทดสอบใน 0.016 วินาทีFAILED (failures=1)ข้อความเราจะล้มเหลวแม้กรณีทดสอบหนึ่งกรณีจะล้มเหลวในทุกกรณีทดสอบ
บทสรุป
หากคุณมีข้อสงสัยใดๆ ในบทแนะนำ โปรดระบุในส่วนความคิดเห็น