ในบทความนี้ เราจะเรียนรู้พื้นฐานของการทดสอบซอฟต์แวร์ด้วยโมดูล unittest ที่มีใน Python 3.x หรือเวอร์ชันก่อนหน้า มันอนุญาตให้ทำอัตโนมัติ แชร์การตั้งค่าและรหัสออกสำหรับการทดสอบ และการทดสอบอิสระสำหรับทุกเฟรมเวิร์ก
ในการทดสอบหน่วย เราใช้แนวคิดเชิงวัตถุหลากหลาย เราจะอภิปรายแนวคิดหลักที่ใช้บ่อยที่สุดที่นี่
Testcase − เป็นคลาสฐานเฉพาะการตอบสนองตามชุดอินพุตที่กำหนด เราใช้คลาสฐานของ unittest คือ "TestCase" เพื่อนำไปใช้งาน
Testsuite − ใช้รวมเคสทดสอบเข้าด้วยกันและรันพร้อมกัน
Testrunner − ทำตามการดำเนินการแบบอิงผลลัพธ์ มีส่วนเกี่ยวข้องกับการแสดงผลหลังจากรันงาน
Test fixture − ใช้เป็นเกณฑ์มาตรฐานสำหรับเคสทดสอบในสภาพแวดล้อมที่เกี่ยวข้อง
ตอนนี้มาดูตัวอย่างพื้นฐานว่าการทดสอบหน่วยทำงานอย่างไร
ตัวอย่าง
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()
ผลลัพธ์
... ---------------------------------------------------------------- Ran 2 tests in 0.000s OK

ในที่นี้เราขยายคลาส unittest แบบการสืบทอดเดียว (single inheritance) เราใช้เมธอดในตัวอย่างเช่น assertEqual(), assertTrue() และ assertFalse()
assertEqual() ใช้ตรวจสอบ/เปรียบเทียบผลลัพธ์กับผลที่คาดหวัง
assertTrue() ใช้ตรวจสอบว่าเงื่อนไขที่กำหนดเป็นจริง (True) หรือไม่
assertFalse() ใช้ตรวจสอบว่าเงื่อนไขที่กำหนดเป็นเท็จ (False) หรือไม่
ผลลัพธ์ของโค้ดข้างต้นสามารถอยู่ในสามรูปแบบ −
OK − แสดงว่าการทดสอบทั้งหมดรันสำเร็จ
FAIL − แสดงว่าเคสทดสอบล้มเหลวและมีข้อยกเว้น AssertionError
ERROR − แสดงว่าการทดสอบก่อให้เกิดข้อยกเว้น/ข้อผิดพลาด
เราสามารถใช้ decorator @unittest.skip(<reason>)
ตัวอย่าง
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()
ผลลัพธ์
... ---------------------------------------------------------------- Ran 2 tests in 0.000s OK (skipped=2)
สรุป
ในบทความนี้ เราได้เรียนรู้เกี่ยวกับ Unit Testing ใน Python โดยใช้โมดูล unittest ใน Python 3.x หรือเวอร์ชันก่อนหน้า