คำถามที่น่าสนใจจากทีมเกี่ยวกับจำลอง API server
เพื่อทดสอบ UI test สำหรับ iOS app จะทำอย่างไรดี ?

คำตอบง่าย ๆ คือ
ง่าย ๆ ให้ทำการส่ง url ของ API server ผ่าน environment variable สิเออ !!!
พูดแบบนี้อาจจะไม่เห็นภาพ
ดังนั้นมาดู code กันหน่อย

ใน UI Test ทำการกำหนดค่าของ url ไว้และใช้งานดังนี้

เป็นวิธีการที่ง่ายมาก ๆ
เพราะว่าใน UI Test นั้นใช้งาน Mock สิ่งต่าง ๆ ก็ใช้ไม่ได้
จึงต้องส่งค่าบางอย่างเข้าไป
จากนั้นต้องเขียน code เพิ่มเพื่อให้เราสามารถควบคุม dependency ต่าง ๆ ได้
เช่นอาจจะส่งค่าบางอย่างเข้าไป
จากนั้นใน production ก็ทำการตรวจสอบ
เพื่อทำการ Mock class บางตัวให้ทำงานตรงตามที่ต้องการ
หรือไม่เช่นนั้นก็ทำการจำลอง API server ขึ้นมาแทนด้วย Stubby4j เป็นต้น
ซึ่งวิธีการนี้ก็พอไปวัดไปวาได้

คำถามคือมีวิธีการอื่นอีกไหม ?

ตอบเลยว่ามีนะ คือ การเพิ่ม configuration สำหรับ UI test ใน xCode project เลย
ซึ่งสามารถทำการสร้าง configuration ใหม่ขึ้นมา
จากตัวอย่างชื่อว่า Localhost แสดงดังรูป

 

จากนั้นทำการกำหนดค่า LOCALHOST เพื่อส่งไปยัง production code

 

จากนั้นในส่วนของการทดสอบให้เลือกใช้ configuration Localhost ซะ

จากนั้นใน production code ให้เขียน code ประมาณนี้
ตรวจสอบว่า run จาก configuration อะไร
จากนั้นก็ทำการกำหนด URL ที่เราต้องการได้ทันที

ทำไมมันช่างซับซ้อนอย่างนี้นะ !!

ข้อเสียที่เห็นได้ชัดเจนจากวิธีการทั้งสองนี้คือ

ต้องเขียน code เพิ่มเติมเพื่อจัดการตามค่าของ environment variable นั่นเอง
ซึ่งเป็น code ที่ไม่ควรอยู่ในส่วนของ production code เลย !!

อีกส่วนคือ API server ที่จำลองขึ้นมาด้วย Stubby4j

มันต้อง start อยู่เสมอด้วยนะ
คำถามคือจะแก้ไขอย่างไรดีละ ?

ตอบง่าย ๆ คือ เพิ่ม Pre-action และ Post-action ในส่วนของ Test นะครับ
เพื่อทำการ start server ก่อนการทดสอบ
เพื่อทำการ stop server หลังจากที่ทดสอบเสร็จสิ้น
แต่ต้องเขียน shell script นิดหน่อย
แสดงดารใช้งานดังรูป

คำถามต่อมาคือ มีอะไรที่คล้าย ๆ กับ MockWebServer หรือไม่ ?

คำตอบก็มีนะเช่น

ขอให้สนุกกับการเขียน code ครับ