ปัญหาหลัก ๆ สำหรับ End-to-End testing ด้วย XCUITest

ประกอบไปด้วย

  • Dependencies ซึ่งจัดการและควบคุมได้ยากมาก ๆ
  • Concurrency คือการทดสอบพร้อม ๆ กัน
  • Repeatability ไม่สามารถทดสอบซ้ำ ๆ ยิ่งกว่านั้นผลการทำงานไม่ค่อยเหมือนเดิมหรือไม่เสถียรเอาซะเลย
  • ส่งผลให้ยากต่อการเขียนชุดการทดสอบ !!

จาก Pyramid Testing สามารถจับคู่กับการทดสอบใน iOS app ได้ดังนี้

  • End-to-End test หรือ UI จะใช้งาน CXUITest
  • Unit test จะใช้งาน XCTest
  • Integration test จะใช้งาน Mobile contract test และ Mock response test เพื่อช่วยให้สามารถควบคุม dependency ต่าง ๆ ได้

แสดงดังรูป

ในส่วนของ Integration test นั่นเอง ที่ Localhost ถูกสร้างขึ้นมา

โดยพัฒนาด้วยภาษา Swift
การใช้งาน Localhost มีขั้นตอนดังนี้

  • L  คือ Localhost นั่นคือการ setup in-memory server และกำหนด port ของ server ได้เลย (random ก็ได้)
  • A คือ API สำหรับทำการ redirect request ไปยัง in-memory server (ทำโดยไม่แก้ไข code ในส่วน production code)
  • I คือ Info.plist ทำการ config ค่าต่าง ๆ ในไฟล์นี้ ช่วยทำให้ไม่ต้องแก้ไข production code และสามารถเรียก localhost ได้
  • M คือ Mock ทำการ mock response ของ in-memory server ตาม test case ที่ต้องการ

จากนั้นก็เริ่มเขียน test กันไปเลย
โดย Localhost ที่สร้างขึ้นมาและปิดไปของแต่ละชุดการทดสอบ
การทำงานของ Localhost แสดงดังรูป

ส่วน code ตัวอย่างจะอยู่ที่ GitHub :: iOS Movie App

มาดู code ตัวอย่างนิดหน่อย

จากที่ลองใช้งานหลังจากที่ฟัง

พบว่า ทำให้นักพัฒนาสามารถทดสอบ iOS app กับ API
เช่น RESTFul API ได้ง่ายขึ้น
เหมือนกับสามารถ Android ที่ใช้งาน MockWebServer เลย

มาลองใช้งานกันดูครับ