มาเขียน Unit Testing ใน Python กัน

Mister Nay
2 min readJan 7, 2018

--

หลังจากผู้เขียนได้ศึกษาเกี่ยวกับการเขียนเทสให้กับโค๊ดของเรา จึงได้ไปเจอ module ตัวหนึ่งที่ใช้สำหรับในการเทส จึงขอมาแชร์ ครับ

module ในนี้ ชื่อว่า

  • unittest

ซึ่งไว้สำหรับ การ Test ซึ่ง ปกติ ใน ภาษาPython สามารถ Test ได้ง่ายๆคือ ใช้ คำสั่ง

assert “Actually” == “Result

แล้วทำไมเราต้องเทส

เพราะ เราต้องทำให้มั่นใจว่า method ที่เราเขียน หรือ โค๊ดที่เราเขียนนั้นใช้ได้จริง หรือก็คือ เป็นสิ่งรับประกัน โค๊ดเราตัวหนึ่ง

มาเริ่มกันเลย

ก่อนอื่นต้องสร้าง method ง่ายๆเพื่อเตรียมสำหรับเทสกันก่อนเลย

โดยจะเป็น method ง่ายๆ คือ บวก ลบ คูณ แล้วก็หารนะครับ

โค๊ดก็ประมาณนี้:

def add(x, y):
return x + y
def multipy(x, y):
return x * y
def divi(x, y):
return x / y
def minus(x, y):
return x - y

อธิบาย — คือ มีการรับค่าตัวแปร 2 ตัว คือ x , y แล้ว return ออกตาม method นั้นๆนะครับ

ต่อไปฝั่ง TestCase

อันดับแรก ขอเทส แบบปกติโดยไม่ใช้ module นะครับ

if __name__ == '__main__':
assert 5 == add(3,2)
assert 6 == multipy(3,2)
assert 10 == minus(20,10)
assert 5 == divi(10,2)

ถ้าถูกต้องโค๊ดจะรันไม่มีปัญหา แต่ถ้าผิด จะแจ้งนะครับ ดังนี้

assert 6 == add(3, 2)
AssertionError

ง่ายๆใช่มั้ยครับ ต่อไปเรามาลองใช้ module นะครับ

สร้าง อีกไฟล์หนึ่งนะครับ จาก นั้น import unittest และ ไฟล์ของเรานะครับ

import unittest
from LearnTests import learnTest
class TestCase(unittest.TestCase):
def test_case1(self):
return ''
if __name__ == '__main__':
unittest.main()

ก็จะมีโครงการใช้งานคร่าวๆแบบข้างบนนะครับ

มาลองเทสกัน

“self.assertEqual(ค่าที่ได้จากmethod,ค่าที่ควรจะเป็น,ข้อความอธิบายเมื่อไม่ถูก)”

def test_add(self):
result = learnTest.add(3, 6)
act = 10
self.assertEqual(result, act, 'เกิดข้อผิดพลาดค่าที่ควรได้ %d แต่ได้ %d' % (act, result))

เมื่อลองรันโค๊ดดูเราจะเห็นว่า จะ Error และจะมีบอกว่าผิดที่อะไรนะครับ

AssertionError: 9 != 10 : เกิดข้อผิดพลาดค่าที่ควรได้ 10 แต่ได้ 9

ดูง่ายมั้ยครับ ถ้าเทสผ่านจะขึ้นคำว่า Ok และเขียวนะครับ

import unittest
from LearnTests import learnTest
class TestCase(unittest.TestCase):
def test_add(self):
result = learnTest.add(3, 6)
act = 9
self.assertEqual(result, act, 'เกิดข้อผิดพลาดค่าที่ควรได้ %d แต่ได้ %d' % (act, result))
def test_minus(self):
result = learnTest.minus(3, 6)
act = -3
self.assertEqual(result, act, 'เกิดข้อผิดพลาดค่าที่ควรได้ %d แต่ได้ %d' % (act, result))
def test_mul(self):
result = learnTest.multipy(3, 6)
act = 18
self.assertEqual(result, act, 'เกิดข้อผิดพลาดค่าที่ควรได้ %d แต่ได้ %d' % (act, result))
def test_div(self):
result = learnTest.divi(10, 2)
act = 5
self.assertEqual(result, act, 'เกิดข้อผิดพลาดค่าที่ควรได้ %d แต่ได้ %d' % (act, result))
if __name__ == '__main__':
unittest.main()

ไม่ใช่แค่มี assertEqual อย่างเดียวสามารถอ่านเพิ่มเติมได้ที่ DOC

สุดท้ายก็….. มาเขียนเทสกันนะครับ เพื่อความถูกต้อง นะครับ ขอบคุณครับ

แหล่งที่มา — document unittest

--

--

No responses yet