![]()
คำถามที่น่าสนใจจากทีมเกี่ยวกับจำลอง API server
เพื่อทดสอบ UI test สำหรับ iOS app จะทำอย่างไรดี ?
คำตอบง่าย ๆ คือ
ง่าย ๆ ให้ทำการส่ง url ของ API server ผ่าน environment variable สิเออ !!!
พูดแบบนี้อาจจะไม่เห็นภาพ
ดังนั้นมาดู code กันหน่อย
ใน UI Test ทำการกำหนดค่าของ url ไว้และใช้งานดังนี้
[gist id="1fe96a5bf11ea512575f5bd96ed3e43e" file="1.swift"]
เป็นวิธีการที่ง่ายมาก ๆ
เพราะว่าใน 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 ที่เราต้องการได้ทันที
[gist id="1fe96a5bf11ea512575f5bd96ed3e43e" file="2.swift"]
ทำไมมันช่างซับซ้อนอย่างนี้นะ !!
ข้อเสียที่เห็นได้ชัดเจนจากวิธีการทั้งสองนี้คือ
ต้องเขียน code เพิ่มเติมเพื่อจัดการตามค่าของ environment variable นั่นเอง
ซึ่งเป็น code ที่ไม่ควรอยู่ในส่วนของ production code เลย !!
อีกส่วนคือ API server ที่จำลองขึ้นมาด้วย Stubby4j
มันต้อง start อยู่เสมอด้วยนะ
คำถามคือจะแก้ไขอย่างไรดีละ ?
ตอบง่าย ๆ คือ เพิ่ม Pre-action และ Post-action ในส่วนของ Test นะครับ
เพื่อทำการ start server ก่อนการทดสอบ
เพื่อทำการ stop server หลังจากที่ทดสอบเสร็จสิ้น
แต่ต้องเขียน shell script นิดหน่อย
แสดงดารใช้งานดังรูป
คำถามต่อมาคือ มีอะไรที่คล้าย ๆ กับ MockWebServer หรือไม่ ?
คำตอบก็มีนะเช่น
ขอให้สนุกกับการเขียน code ครับ