Unit test คืออะไร และทำไมต้องทำ
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
ผลที่ออกมา เทสพัง ???????
ก็แน่ละ… ยังไม่ได้เขียนโค้ดของฟังก์ชันเลย 5555
ไหนมาลองเขียนโค้ดของฟังก์ชัน calculateGrade กันสักหน่อย
Simple code ทำเสร็จใน 1นาที!
ไหน… ลองรันเทสใหม่อีกรอบ มันต้องผ่านแล้วละ
เทสพังอยู่ดี !!!
ถ้าลองมาสังเกตว่าพังที่ตรงไหน แทบทั้งหมดนั้นมาจาก invalid เคสทั้งหมด ซึ่งบางที่ เราเขียนโค้ดแล้วก็ลืมใส่ใจเคสพวกนี้ไป จะทำให้เกิดบัคโดยที่เราไม่รู้ก็ได้ แต่ว่าปัญหาจะหมดไป ถ้าเราเขียน Unit test เพื่อเอาไว้เช็คเคสพวกนี้
แก้โค้ดใหม่
รันเทสอีกรอบ!
เทสผ่านแล้ว !!!
สรุป
การเขียน Unit test นั้นไม่ยากเลยใช่ไหมครับ แต่ว่าประโยชน์ที่ได้จากการเขียน นี่มหาศาลเลยครับ
เพื่อนๆ ก็อย่าลืมเขียน Unit test กันด้วยนะครับ
มีน้อย ดีกว่าไม่มีเลยครับ
ปล. สามารถเข้าไปดูโค้ดทั้งโปรเจคได้ที่ https://github.com/medunla/unit-test-example