
Estimated practice time
15 minute
Unit Testing คืออะไร?
ในการสร้าง Program มักจะประกอบไปด้วย Function จำนวนมาก และคงไม่ใช่เรื่องแปลก หากจะพบเจอความผิดพลาดใน Function ต่างๆ
โดยความผิดพลาดนั้น ก็จะทำให้เกิดความเสียหายในเชิงธุรกิจ หรืออาจสร้างความเสียหายต่อ Function อื่นๆ
จึงถือว่าจำเป็นมากกกกก ที่จะทำสิ่งที่เรียกว่า Unit Testing ก่อน หลังจากเขียน Code เสร็จ เพื่อตรวจสอบข้อผิดพลาดที่อาจเกิดขึ้น และได้ feedback อย่างรวดเร็ว
ซึ่ง Unit Testing คือการทดสอบหน่วยย่อยที่สุดของโปรแกรม ว่าทำงานตามที่เราต้องการหรือไม่
หรือในภาษา Java จะเรียกว่าเป็นการทดสอบ Method นั่นเอง

ลองเขียน Unit Testing
ในบทความนี้จะเขียนด้วยภาษา Java ในตัวช่วยเขียนโปรแกรม (IDE) ที่ชื่อว่า Apache Netbeans กด Download ได้เลย
หากต้องการทำตามโดยใช้ IDE ตัวอื่นๆก็ได้เช่นกัน แต่อย่าลืมติดตั้งเครื่องมือช่วยสร้างโปรเจค (Build System) ที่ชื่อว่า Maven ด้วยนะ
สามารถเปิดดูจาก
ไปพร้อมกับอ่านคำอธิบายในบทความนี้ได้เล้ย
สร้าง Directory
สร้าง Directory หรือเรียกว่าเป็นการสร้าง Folder และ File ต่างๆที่ใช้ในโปรเจค

พอสร้างเสร็จแล้วเข้าไปใน Netbeans จากนั้นเลือก File > Open Project แล้วเลือก Folder ที่เราพึ่งสร้างที่ชื่อ java-unit-testing
เขียน File ต่างๆ
จากนั้นเขียน Code ในไฟล์ทั้ง 4 ไฟล์
pom.xml
POM ย่อมาจาก Project Object Model เป็นไฟล์ที่เอาไว้กำหนดการตั้งค่าต่างๆในโปรเจค
<modelVersion> = เวอร์ชันของ Project Object Model (POM)
<groupId> = มักจะหมายถึงชื่อของบริษัทที่เขียนกลับหลัง
<artifactId> = มักจะหมายถึงชื่อของโปรเจค
<properties> = ภายในนี้กำหนดว่าใช้ Java เวอร์ชัน 22
Start.java
เขียน Class Start โดยที่ข้างในมี Function main อยู่ เนื่องจาก Java จะเริ่มต้นรันโปรเจคจากการมองหา File ที่มี Function main ก่อน
Payment.java
เขียน Class Payment ซึ่งเกี่ยวข้องกับกระบวนการจ่ายเงิน โดยจะประกอบด้วย Method ต่างๆ เช่น การรับเงิน-ทอนเงินหากจ่ายด้วยเงินสด, การจ่ายเงินด้วย QR Code, หรือจะเป็นการคำนวณส่วนลดต่างๆ
โดยในตัวอย่างนี้จะเขียน Method คำนวณส่วนลด ถ้าหากซื้อกาแฟมากกว่าหรือเท่ากับ 100 บาท จะได้ส่วนลด 5%
Tip! จริงๆแล้ว Method getTotal() สามารถเขียนภายในบรรทัดเดียวได้ โดยใช้สิ่งที่เรียกว่า Ternary operator
double getTotal(double price) {
return price >= 100 ? price * 0.95 : price;
}
Test.java
ภายใน Netbeans ใช้เครื่องมือช่วยสร้างโปรเจค (Build System) ที่ชื่อว่า Maven ซึ่งมีข้อบังคับอยู่ว่าตัว Class ที่ใช้ Test ต้องเป็น public class และต้องชื่อเดียวกันกับชื่อไฟล์
ภายในไฟล์เริ่มจากสร้าง Class ชื่อ Test (ชื่อเดียวกันกับชื่อไฟล์)
-> สร้าง Method ขึ้นมาชื่อ test001 หมายถึงการทดสอบกรณีที่ 1
-> สร้าง Instance ของ Class ที่เราต้องการทดสอบ Method ภายใน
-> เรียก Method ที่ต้องการทดสอบ คือ getTotal() โดยใส่ราคาที่ต้องการทดสอบเข้าไป คือ 120 บาท
โดยเรากำหนดว่าถ้าหากซื้อกาแฟมากกว่า 100 บาทจะลดราคา 5% ดังนั้น ราคาสุทธิควรจะเป็น 120 * 0.95 = 114 บาท
-> ใส่ผลลัพธ์ที่เราต้องการจาก Method นี้เข้าไปโดยใช้คำว่า assert หรือแปลว่ายืนยันนั่นเอง
มาชื่นชมผลงานเราของกัน
เมื่อเขียน Code ครบทั้ง 4 ไฟล์แล้ว ให้คลิ้กขวาที่โปรเจคจากนั้นกด Build

เมื่อขึ้นว่า BUILD SUCESS แล้วกด Test ต่อเลย

ถ้าขึ้นมาอย่างนี้ถือว่าเรียบร้อย Method นี้ทำงานตามที่เราต้องการแล้ว ไปเปิดร้านกาแฟได้!
เนื้อหาเพิ่มเติม
ผลลัพธ์ที่ทดสอบในบทความนี้เป็นจำนวนเต็ม (assert total == 114.0) แต่ถ้าหากผลลัพธ์ที่เราต้องการทดสอบเป็นเลขทศนิยมจะ test ไม่ผ่าน
เช่น ซื้อกาแฟทั้งหมด 121 บาท ราคาสุทธิจะอยู่ที่ 121 * 0.95 = 114.95
(assert total == 114.95) -> Test Failed
ทำไมถึงไม่ผ่าน? อยากหยุดคิดก่อน หรือกดดูเฉลยด้านล่างได้เลย
เฉลย
Unit Testing ใช้หลักการที่เรียกว่า assert
ค่าทั่วไปจะใช้ได้ปกติ แต่ถ้าหากเป็นตัวเลขทศนิยม ไม่ว่าเขียนในภาษาไหนก็ตามมันจะเก็บไว้เพียงค่าประมาณ ซึ่งในกรณีนี้จะได้ค่า 114.94999999999999
(assert total == 114.94999999999999) -> Test Passed
เพราะฉะนั้นต้องเผื่อค่าความผิดพลาดไว้ด้วย
แต่ถ้าหากเราจะมากรอกค่าประมาณที่ถูกต้องจากโปรแกรมหลายๆค่าก็คงจะเหนื่อย ซึ่งมีวิธีที่ง่ายกว่านี้แน่นอน รอติดตามในบทความต่อไปได้เลยคร้าบ


Leave a comment