UI Test เป็นหนึ่งในรูปแบบการเขียนอย่างหนึ่งบนหลาย ๆ Platform เพื่อทำให้มั่นใจว่า UI ที่แสดงให้ผู้ใช้เห็นนั้นถูกต้องตามที่กำหนดไว้หรือไม่ และสำหรับ Android ก็เป็นหนึ่งใน Platform ที่นักพัฒนาควรเขียน UI Test ด้วยเช่นกัน

แต่รู้หรือไม่ว่าขอบเขตของ UI Test สำหรับแต่ละคนอาจจะไม่เหมือนกันก็เป็นได้

UI Test ใช้ได้ทั้งใน Integration Test และ End-to-end Test

สำหรับ End-to-end Test จะเรียกกันสั้น ๆ ว่า E2E Test

ดังนั้นการใช้ UI Test แทนคำว่า Integration Test หรือ E2E Test อาจจะเกิดความสับสนได้ง่าย โดยเฉพาะตอนที่คุยกับอื่นที่ไม่ใช่ทีมพัฒนาด้วยกัน เช่น ทีมพัฒนาคนละบริษัท หรือ ลูกค้า เป็นต้น

สำหรับการพูดคุยทั่วไปคงไม่ได้มีผลอะไรมากนัก แต่ถ้าเป็นกรณีของ "การว่าจ้างงานระหว่าง ลูกค้า - ผู้ให้บริการ" ก็อาจจะต้องระวังหน่อย เพราะขอบเขตของงานกับต้นทุนที่ต้องใช้ระหว่างการทำ Integration Test กับ E2E Test นั้นแตกต่างกันค่อนข้างมาก

ทั้งสองแบบต่างกันอย่างไร​ ?

ถ้าจะให้ตอบแบบสั้น ๆ ก็คือ "ต่างกันตรงขอบเขตของระบบที่ต้องการทดสอบ" โดยอ้างอิงจาก Test Pyramid

แหล่งข้อมูลบางแห่งจะใช้คำว่า UI Test แทนคำว่า E2E Test ที่ทำให้เกิดความเข้าใจผิดเกี่ยวกับการเขียนเทสบนแอนดรอยด์ได้ง่าย

Integration Test

การเขียนเทสแบบ Integration Test จะเน้นไปที่การทำงานของระบบบางส่วน โดยมีการใช้ Test Double ในบางส่วนเพื่อตัดการทำงานของระบบที่ไม่ต้องการทดสอบออกไป

ยกตัวอย่างเช่น นักพัฒนาต้องการทดสอบว่าแอปสามารถทำงานและแสดงผลได้ถูกต้อง จึงเขียน UI Test ที่ใช้ Test Double กับโค้ดที่ต้องเชื่อมต่อกับ Web Server เป็นต้น

ข้อดีคือใช้ระยะเวลาทดสอบน้อยและเกิด Flakiness ได้ยากกว่า E2E Test เพราะตัดปัจจัยบางส่วนออกไปเพื่อให้เหลือเฉพาะการทดสอบที่เราสนใจเท่านั้น

E2E Test

การเขียนเทสแบบ E2E Test จะเน้นไปที่การทำงานของระบบทั้งหมด โดยจะจำลองสภาพแวดล้อมและข้อมูลที่เหมือนกับสถานการณ์จริง เพื่อทดสอบว่าระบบทั้งหมดสามารถทำงานได้อย่างถูกต้อง

และวิธีนี้มีข้อดีตรงที่ทีมพัฒนาสามารถมั่นใจได้ว่าระบบทั้งหมดสามารถทำงานร่วมกันได้จริง ในขณะที่การทำ Integration Test จะมั่นใจได้แค่ว่าระบบบางส่วนทำงานถูกต้องเท่านั้น แต่ไม่ได้ทดสอบว่าระบบทั้งหมดสามารถทำงานร่วมกันได้อย่างถูกต้อง

สรุป

UI Test จะใช้กับ Integration Test หรือ E2E Test ก็ได้ โดยขึ้นอยู่กับเป้าหมายของทีมพัฒนาว่าต้องการทดสอบระบบในรูปแบบไหน (จะทำในรูปแบบใดแบบหนึ่งหรือทำทั้งสองแบบก็ได้เช่นกัน)

และการใช้คำว่า UI Test เพื่อพูดคุยกับคนในทีมก็คงไม่มีปัญหาอะไร เพราะทุกคนรู้จักและเข้าใจระบบที่ต้องดูแลอยู่แล้ว แต่การพูดคุยกับคนภายนอกหรือต่างทีมก็อาจจะทำให้เกิดความเข้าใจผิดกันได้

ดังนั้นทางที่ดีก็ลองเช็คกันด้วยนะว่า UI Test ที่พูดถึงกันเนี่ยหมายถึงอย่างไหนกันแน่ จะได้ไม่สับสนหรือเข้าใจผิดกันในภายหลัง