บทช่วยสอน PyUnit: Python กรอบการทดสอบหน่วย (พร้อมตัวอย่าง)
⚡ สรุปอย่างชาญฉลาด
Python การทดสอบหน่วย (Unit Testing) ตรวจสอบส่วนเล็กๆ ของโค้ดของคุณแบบแยกส่วน เพื่อตรวจจับข้อผิดพลาดตั้งแต่เนิ่นๆ ในที่นี้คุณจะได้เรียนรู้เทคนิคการทดสอบหน่วย เฟรมเวิร์ก PyUnit (unittest) คลาสหลักๆ วิธีการออกแบบกรณีทดสอบ และตัวอย่างการทำงานจริง

การทดสอบหน่วยคืออะไร?
การทดสอบหน่วย in Python ดำเนินการเพื่อระบุข้อบกพร่องตั้งแต่เนิ่นๆ ในขั้นตอนการพัฒนาของแอปพลิเคชัน เมื่อข้อบกพร่องเกิดขึ้นอีกน้อยลงและมีค่าใช้จ่ายในการแก้ไขน้อยลง
การทดสอบหน่วยคือการทดสอบระดับรหัสสคริปต์ที่ออกแบบ Python เพื่อตรวจสอบ "หน่วย" การทำงานขนาดเล็ก การทดสอบหน่วยเป็นเฟรมเวิร์กเชิงวัตถุที่อิงตามฟิกซ์เจอร์ทดสอบ
Python เทคนิคการทดสอบหน่วย
Python การทดสอบหน่วยส่วนใหญ่เกี่ยวข้องกับการทดสอบโมดูลเฉพาะโดยไม่ต้องเข้าถึงโค้ดที่ต้องพึ่งพาใดๆ นักพัฒนาสามารถใช้เทคนิคต่างๆ เช่น stubs และ mocks เพื่อแยกโค้ดออกเป็น “หน่วย” และทำการทดสอบระดับหน่วยกับแต่ละส่วนได้
- การพัฒนาที่ขับเคลื่อนด้วยการทดสอบ TDD: การทดสอบหน่วยควรทำควบคู่ไปกับ Pythonและสำหรับนักพัฒนานั้นใช้วิธีการพัฒนาที่ขับเคลื่อนด้วยการทดสอบ ในวิธี TDD คุณต้องออกแบบก่อน Python การทดสอบหน่วยและจากนั้นคุณจึงเขียนโค้ดที่จะใช้คุณลักษณะนี้ต่อไป
-
ต้นขั้วและเยาะเย้ย: เป็นสองเทคนิคหลักที่จำลองวิธีการปลอมที่กำลังทดสอบ ก ต้นขั้ว ใช้เพื่อกรอกข้อมูลการพึ่งพาที่จำเป็นสำหรับการทดสอบหน่วยเพื่อให้ทำงานได้อย่างถูกต้อง ก เยาะเย้ย ในทางกลับกันเป็นวัตถุปลอมที่ทำการทดสอบที่เรายืนยัน
ความตั้งใจของทั้งสองวิธีเหมือนกันในการกำจัดการทดสอบการขึ้นต่อกันทั้งหมดของคลาสหรือฟังก์ชัน
Python กรอบการทดสอบหน่วย
เพื่อให้กระบวนการทดสอบหน่วยง่ายขึ้นและปรับปรุงคุณภาพของโครงการของคุณ ขอแนะนำให้ Python กรอบการทดสอบหน่วย กรอบการทดสอบหน่วยประกอบด้วย
-
หน่วยไพ: PyUnit รองรับฟิกซ์เจอร์ กรณีทดสอบ ชุดทดสอบ และตัวดำเนินการทดสอบสำหรับการทดสอบโค้ดอัตโนมัติ ใน PyUnit คุณสามารถจัดระเบียบกรณีทดสอบเป็นชุดที่มีการติดตั้งแบบเดียวกันได้
-
จมูก: ปลั๊กอินในตัวของ Nose ช่วยคุณในการจับภาพเอาต์พุต การครอบคลุมโค้ด การทดสอบเอกสาร ฯลฯ ไวยากรณ์ของจมูกค่อนข้างง่ายกว่าและลดอุปสรรคในการเขียนการทดสอบ มันขยายออกไป Python unittest เพื่อให้การทดสอบง่ายขึ้น
- อาจารย์ : สคริปต์การทดสอบ Doctest อยู่ใน docstring พร้อมฟังก์ชันขนาดเล็กที่ด้านล่างของไฟล์ Doctest ช่วยให้คุณสามารถทดสอบโค้ดของคุณโดยการรันตัวอย่างที่รวมอยู่ในเอกสารประกอบ และตรวจสอบว่าตัวอย่างเหล่านั้นส่งคืนผลลัพธ์ที่คาดหวัง กรณีการใช้งานของ doctest มีรายละเอียดน้อยกว่าและไม่รองรับกรณีพิเศษ สิ่งเหล่านี้มีประโยชน์ในฐานะเอกสารประกอบที่ชัดเจนเกี่ยวกับกรณีการใช้งานหลักของโมดูลและส่วนประกอบต่างๆ
การทดสอบหน่วยด้วย PyUnit
พยูนเป็น Python พอร์ตของ JUnit- ในฐานะส่วนหนึ่งของ Pyunit ในโมดูล unittest จะมีคลาสหลักอยู่ห้าคลาส
- คลาส TestCase: คลาส TestCase รองรับขั้นตอนการทดสอบและจัดเตรียมขั้นตอนสำหรับการทำแต่ละขั้นตอนและการทำความสะอาดหลังจากนั้น
- คลาส TestSuite: ทำหน้าที่เป็นคอนเทนเนอร์คอลเลกชัน และสามารถมีวัตถุชุดทดสอบได้หลายรายการและวัตถุชุดทดสอบหลายรายการ
- คลาส TestLoader: คลาสนี้โหลดกรณีทดสอบและชุดที่กำหนดในเครื่องหรือจากไฟล์ภายนอก โดยจะปล่อยออบเจ็กต์ชุดทดสอบที่มีห้องชุดและเคสเหล่านั้นออกมา
- คลาส TextTestRunner: เพื่อดำเนินการทดสอบ จะมีแพลตฟอร์มมาตรฐานสำหรับดำเนินการทดสอบ
- คลาส TestResults: มีภาชนะมาตรฐานสำหรับผลการทดสอบ
การออกแบบกรณีทดสอบสำหรับ Python การทดสอบโดยใช้ PyUnit
การทดสอบหน่วยจัดให้มีคลาสพื้นฐาน กรณีทดสอบ ซึ่งอาจใช้เพื่อสร้างกรณีทดสอบใหม่ สำหรับการออกแบบกรณีทดสอบนั้นมีวิธีการใช้อยู่ 3 ชุด ได้แก่
unittest.TestCase
setUp() teardown() skipTest(aMesg:string) fail(aMesg:string) id():string shortDescription():string
ชุดแรกเป็นตะขอทดสอบก่อนและหลัง วิธีการตั้งค่า () เริ่มต้นก่อนรูทีนการทดสอบแต่ละครั้ง และการแยกส่วน () หลังจากรูทีน
วิธีชุดที่สองควบคุมการดำเนินการทดสอบ ทั้งสองวิธีใช้สตริงข้อความเป็นอินพุต และทั้งสองวิธียกเลิกการทดสอบที่กำลังดำเนินอยู่ แต่เมธอด skiktest() จะยกเลิกการทดสอบปัจจุบัน ในขณะที่เมธอด failed() ล้มเหลวโดยสิ้นเชิง
วิธีสุดท้ายหรือที่สามช่วยในการกำหนดการทดสอบ วิธีการ id() ส่งคืนสตริงที่ประกอบด้วยชื่อของวัตถุ testcase และของรูทีนการทดสอบ และวิธีการสั้นๆDescription() ส่งคืนความคิดเห็น docstr เมื่อเริ่มต้นรูทีนการทดสอบแต่ละอัน
Python ตัวอย่างการทดสอบหน่วย
ตัวอย่างด้านล่างนี้ทดสอบฟังก์ชัน add() อย่างง่ายโดยใช้โมดูล unittest เมธอดแต่ละตัวที่มีคำนำหน้า test_ จะทำงานโดยอัตโนมัติ และ assertEqual จะตรวจสอบผลลัพธ์เทียบกับค่าที่คาดหวัง
import unittest def add(a, b): return a + b class TestAdd(unittest.TestCase): def test_add_positive(self): self.assertEqual(add(2, 3), 5) def test_add_negative(self): self.assertEqual(add(-1, -1), -2) if __name__ == "__main__": unittest.main()
บันทึกโค้ดแล้วรันด้วยคำสั่ง `python filename.py` โปรแกรม unittest จะรายงานจำนวนการทดสอบที่ผ่านหรือล้มเหลว
ข้อดีของการใช้ Python การทดสอบหน่วย
- ช่วยให้คุณตรวจจับจุดบกพร่องได้ตั้งแต่เนิ่นๆ ของวงจรการพัฒนา
- ช่วยให้คุณเขียนโปรแกรมได้ดีขึ้น
- สามารถซิงค์กับวิธีการทดสอบและเครื่องมืออื่น ๆ ได้อย่างง่ายดาย
- มันจะมีข้อบกพร่องน้อยลงมาก
- ในอนาคตจะแก้ไขได้ง่ายกว่าโดยมีผลกระทบน้อยมาก



