จับมือทำ Unit Testing

Estimated practice time

15 minute

  1. Unit Testing คืออะไร?
  2. ลองเขียน Unit Testing
  3. เนื้อหาเพิ่มเติม

Unit Testing คืออะไร?

ในการสร้าง Program มักจะประกอบไปด้วย Function จำนวนมาก และคงไม่ใช่เรื่องแปลก หากจะพบเจอความผิดพลาดใน Function ต่างๆ

โดยความผิดพลาดนั้น ก็จะทำให้เกิดความเสียหายในเชิงธุรกิจ หรืออาจสร้างความเสียหายต่อ Function อื่นๆ

จึงถือว่าจำเป็นมากกกกก ที่จะทำสิ่งที่เรียกว่า Unit Testing ก่อน หลังจากเขียน Code เสร็จ เพื่อตรวจสอบข้อผิดพลาดที่อาจเกิดขึ้น และได้ feedback อย่างรวดเร็ว

ซึ่ง Unit Testing คือการทดสอบหน่วยย่อยที่สุดของโปรแกรม ว่าทำงานตามที่เราต้องการหรือไม่

หรือในภาษา Java จะเรียกว่าเป็นการทดสอบ Method นั่นเอง

ตัวอย่างโปรแกรม Coffee Shop ที่ประกอบด้วย Method ต่างๆ

ลองเขียน Unit Testing

ในบทความนี้จะเขียนด้วยภาษา Java ในตัวช่วยเขียนโปรแกรม (IDE) ที่ชื่อว่า Apache Netbeans กด Download ได้เลย

หากต้องการทำตามโดยใช้ IDE ตัวอื่นๆก็ได้เช่นกัน แต่อย่าลืมติดตั้งเครื่องมือช่วยสร้างโปรเจค (Build System) ที่ชื่อว่า Maven ด้วยนะ

สามารถเปิดดูจาก

ไปพร้อมกับอ่านคำอธิบายในบทความนี้ได้เล้ย

สร้าง Directory

สร้าง Directory หรือเรียกว่าเป็นการสร้าง Folder และ File ต่างๆที่ใช้ในโปรเจค

Directory ตามแบบที่ Maven กำหนดไว้ (ปรับได้ แต่ต้องไปตั้งค่าใน pom.xml)

พอสร้างเสร็จแล้วเข้าไปใน 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 และ Test ใน Netbeans

เมื่อขึ้นว่า 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

เพราะฉะนั้นต้องเผื่อค่าความผิดพลาดไว้ด้วย

แต่ถ้าหากเราจะมากรอกค่าประมาณที่ถูกต้องจากโปรแกรมหลายๆค่าก็คงจะเหนื่อย ซึ่งมีวิธีที่ง่ายกว่านี้แน่นอน รอติดตามในบทความต่อไปได้เลยคร้าบ

Get new posts sent directly to your inbox!


Comments

Leave a reply to พาทำ Web Service แบบง่ายๆ ด้วย Spring Boot – Kornkan Website Cancel reply