Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

การทดสอบหน่วย (Unit Testing) ใน Python ด้วย unittest


ในบทความนี้ เราจะเรียนรู้พื้นฐานของการทดสอบซอฟต์แวร์ด้วยโมดูล 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

การทดสอบหน่วย (Unit Testing) ใน Python ด้วย unittest

ในที่นี้เราขยายคลาส 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 หรือเวอร์ชันก่อนหน้า