การเขียน Unit Test ด้วยภาษา GO
ผมขอออกตัวก่อนเลยนะคับว่านี้เป็นครั้งแรกในการเขียนบล็อกหากมีการเขียนผิดหรือตกหล่นอะไรไปก็ขออภัยด้วนน่ะคับ เรามาเริ่มกันเลย ในที่นี้จะใช้ตัวอย่างเกม Fizzbuzz โดย กฎของเกม มีดังนี้ สมมุติว่าเรานั่งกันเป็นวงกลม เริ่มจากคนแรกต้องพูดว่า 1 คนที่สองพูดว่า 2 คนที่สามพูดว่า Fizz คนที่สี่พูดว่า 4 คนที่ห้าพูดว่า Buzz … ตามภาพด้านล่างนี้
อันดับแรกในการเขียน Test ในภาษา GO เริ่มจาก สร้างไฟล์ ชื่อ Fizzbuzz_test.go โดยตัวภาษา GO จะมองไฟล์ที่ลงท้ายด้วย _test.go จะเป็นไฟล์ที่เขียน test กระบวนการในการเขียน TDD เริ่มจากสร้าง test case ขั้นที่สองไปเขียนตัวโปรแกรม ให้ใช้งานได้ ในเมื่อโปรแกรมเราทำงานได้ run test case ผ่าน ก็กลับมาดูโค้ดว่ามีส่วนไหนที่แก้ไขให้ดีขึ้นได้ไหม หากต้องการรายระเอียดของการเขียน TDD คลิก ในไฟล์เราจะเรียกใช้ package ที่ตรงกับที่เราตั้งชื่อใว้ในไฟล์ Fizzbuzz.go ในที่จะใช้ชื่อ package เป็น fizzbuzz ในส่วนของ import “strconv” หมายถึง เรียกใช้ Library สำหรับการเขียน String และ import “testing” หมายถึง เรียกใช้ Library สำหรับการเขียน test โดยตัวอย่าง fizzbuzz จะพูดว่า Fizz เมื่อเลขนั้น mod ด้วย 3 ลงตัว พูดว่า Buzz เมื่อเลขนั้น mod ด้วย 5 ลงตัว และจะพูดว่า FizzBuzz เมื่อเลขนั้น mod 3 และ 5 ลงตัว เราจะได้ Unit Test ดังนี้
เราจะตั้งชื่อ Test case ที่ต้องเริ่มต้นด้วย Test เสมอ และต้องมีความหมายโดยเริ่มจากเราจะ Test อะไร Input อะไร Output เป็นอะไร ในที่นี้เราต้องการ Test say โดย Input เป็น 1 และ Output เป็น 1 ตัวแปร์ actual หมายถึง ค่าที่ได้จากฟังก์ชัน say() ที่ต้องสร้างฟังก์ชันนี้ในไฟล์ FizzBuzz.go เมื่อได้ค่า actual จะมาเช็คว่ามีค่าตรงกลับค่าที่เราต้องการหรือไม่ ถ้าไม่จะแสดง error ในบรรทัด 9 จากนั้นเราก็ไปเขียน code ให้ Test case ผ่าน
การที่เราออกแบบ Test case ก่อนเขียนโปรแกรมจะช่วยให้เราเขียนโปรแกมได้ตรงตาม requirement เพราะ Test case มาจากการวิเคราะห์ระบบมาแล้วและยังทำให้การ maintain code ได้ง่ายขึ้นช่วยให้รู้ว่าในการเปลี่ยน requirement จะส่งผลกระทบในส่วนไหนบ้างและจะได้แก้ฟังก์ชันเฉพาะที่มีผลกระทบ
source code :: https://github.com/SCK-SEAL-TEAM-One/fizzbuzz-n-lift-control-tdd.git