Golang Mocking

บล็อกนี้จะมาแชร์วิธีการ Mock ในโกแลงที่เราใช้งานกัน 
ใน Golang66 พี่ยอด ได้แชร์ไว้ส่วนหนึ่งที่เป็นยุคแรกๆที่เราใช้กัน 
วันนี้จะมาแชร์กันอีกแนวคิดในการใช้ embedding มาดูกัน

หลายคนใช้รูปแบบการ Mock แบบใช้ตัวแปร
และคนที่เรียกใช้ ทำการเรียกผ่านตัวแปรแบบนี้

พอตอนเราเขียนเทสก็ใช้วิธีการเปลี่ยนค่าตัวแปรเลย

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

จากโค้ดตัวอย่างเราทำให้เห็นว่าฟังก์ชัน GetOwnerComputer 
ทำการคืนค่า Owner มาให้ ที่นี้ถ้าเราอยากทำการทดสอบฟังก์ชันนี้
เราจะสามารถทำได้ดังนี้

จากโค้ดเราจะเห็นว่าเราต้องทำการสร้าง struct mockMacBook 
ที่ทำการ implement interface Computer ซึ่งจะต้องสร้าง method
ให้ครบตาม interface แต่ในความจริงแล้ว มันมากเกินความจำเป็น
เพราะจริงๆเราอยากทดสอบเพียงฟังก์ชั่น GetOwner 
เราน่าจะ Mockc แค่ฟังก์ชัน GetOwner นะ

ในโกแลงมีสิ่งที่เรียกว่า embedding ซึ่งสามารถทำได้ทั้ง struct และ interface
ซึ่งมันสามารถทำให้ชีวิตเราง่ายขึ้นมากๆ

จะเห็นได้ว่าเราเพียงทำการฝัง interface Computer เข้าไปใน struct mockMacBook จะทำให้เราสามารถทำการ Mock เฉพาะ method 
ที่เราต้องการทดสอบได้ง่ายๆ ไม่ต้องเขียนโค้ด
ที่ไม่จำเป็นต่อการทดสอบด้วยครับ

Show your support

Clapping shows how much you appreciated Anuchit Prasertsang’s story.