Unit test คืออะไร และทำไมต้องทำ

Panupat Kammahawong
2 min readJun 13, 2021

--

Unit test คือการเขียนเทสรูปแบบหนึ่ง สำหรับการทำเว็บไซต์ เราจะเขียน unit test สำหรับเทสฟังก์ชันของเรา เพื่อจะเทสว่าการทำงานของฟังก์ชันที่เราเทส สามารถทำงานได้อย่างถูกต้อง ตรงตามที่เราต้องการ

ทำไมต้องเขียน Unit test ด้วย ?

ประโยชน์ของ Unit test คือช่วยให้เรา หรือคนอื่นแก้ไขโค้ดได้อย่างสบายใจ ปลอดภัย ไม่ทำให้ของเดิมที่มีอยู่พัง เนื่องจากเรามี Unit test คอยช่วยเช็คว่าโค้ดสามารถทำงานได้ตรงตามที่เราต้องการหรือไม่ หลังจากที่เราแก้ไขมันไป

ใครจะไปรู้ ในอนาคตอีก 10 ปี ข้างหน้า คุณอาจจะต้องกลับมาแก้ไขโค้ดเก่าก็ได้ แล้วคุณมั่นใจอย่างไร ว่าคุณจะสามารถแก้ไขโค้ด โดยที่ไม่ไปกระทบส่วนอื่นได้ นี่แหละครับ คือเหตุผลที่คุณควรเขียน Unit test

Unit test เขียนยังไง ?

การเขียน Unit test นั่นง่ายมาก สามารถทำได้โดยที่โค้ดที่เราจะเทสนั้น ยังไม่ทันได้เขียนได้เลยด้วยซ้ำ

หลักการคือ ลิสต์สิ่งที่ฟังก์ชันนั้นต้องการตาม requirement หรือ business logic

ขอยกตัวอย่างเป็น ฟังก์ชันแสดงเกรดจากคะแนน
คะแนน 80-100 แสดงเกรด A
คะแนน 70-79 แสดงเกรด B
คะแนน 60-69 แสดงเกรด C
คะแนน 50-59 แสดงเกรด D
คะแนน 0-49 แสดงเกรด F

Unit test ที่ออกมา ก็จะเป็นประมานนี้

คำอธิบายเพิ่มเติม: โค้ดตัวอย่าง ถูกเขียนอยู่ในโปรเจค Vue.js ด้วย Jest ที่เป็น JavaScript Testing Framework

หลังจากที่เราได้เคสหลักของการทำงานแล้ว เรามาเพิ่มพวก invalid เคสกันบ้าง

ทดลองรันเทสกันสักหน่อย ด้วยคำสั่ง yarn test

Test result — FAIL!

ผลที่ออกมา เทสพัง ???????
ก็แน่ละ… ยังไม่ได้เขียนโค้ดของฟังก์ชันเลย 5555

ไหนมาลองเขียนโค้ดของฟังก์ชัน calculateGrade กันสักหน่อย

Simple code ทำเสร็จใน 1นาที!

ไหน… ลองรันเทสใหม่อีกรอบ มันต้องผ่านแล้วละ

Test result — FAIL again

เทสพังอยู่ดี !!!

ถ้าลองมาสังเกตว่าพังที่ตรงไหน แทบทั้งหมดนั้นมาจาก invalid เคสทั้งหมด ซึ่งบางที่ เราเขียนโค้ดแล้วก็ลืมใส่ใจเคสพวกนี้ไป จะทำให้เกิดบัคโดยที่เราไม่รู้ก็ได้ แต่ว่าปัญหาจะหมดไป ถ้าเราเขียน Unit test เพื่อเอาไว้เช็คเคสพวกนี้

แก้โค้ดใหม่

รันเทสอีกรอบ!

Test result — PASS

เทสผ่านแล้ว !!!

สรุป

การเขียน Unit test นั้นไม่ยากเลยใช่ไหมครับ แต่ว่าประโยชน์ที่ได้จากการเขียน นี่มหาศาลเลยครับ
เพื่อนๆ ก็อย่าลืมเขียน Unit test กันด้วยนะครับ

มีน้อย ดีกว่าไม่มีเลยครับ

ปล. สามารถเข้าไปดูโค้ดทั้งโปรเจคได้ที่ https://github.com/medunla/unit-test-example

--

--

Panupat Kammahawong
Panupat Kammahawong

Written by Panupat Kammahawong

นักอ่านนิยายตัวยง ผู้ดองนิยายไว้เต็มตู้ 🤣

No responses yet