ในการพัฒนาแอปพลิเคชันใดๆก็ตาม ควรมีการเขียนเทสเพื่อให้มั่นใจว่าโค๊ดของผู้ที่หลงเข้ามาอ่านจะทำงานได้ถูกต้อง ครอบคลุมกับ Requirement และลดจำนวนบั๊กให้น้อยลง
การเขียนเทสปกติก็จะมีอยู่ 2 แบบด้วยกันคือ Unit Test และ UI Automated Test แต่ทว่าการทำ Unit Test บน Android Studio นั้นจะแบ่งออกมาเป็น 2 ส่วนด้วยกันคือ Unit Test และ Instrumentation Test
แล้ว Unit Test กับ Instrumentation Test นี่มันต่างกันยังไงล่ะ?
ถึงแม้ว่าทั้งคู่จะเป็น Unit Test เหมือนกัน แต่Unit Test จะเป็นการทดสอบ Logic ของโค๊ดจาวาพื้นฐานที่ทำงานได้เลยบน JVM อย่างเช่น Model Class, Business Logic หรือ Utility Class
Instrumentation Test เป็นการทดสอบการทำงานของโค๊ดที่เกี่ยวข้องกับ Life Cycle, Event หรือ Resource ของแอนดรอยด์
ต่างกันเพียงแต่ว่า Unit Test จะเข้าถึง Resource ของแอนดรอยด์ไม่ได้ (ก็ต้อง Mock เอาเองทั้งหมด ถ้าอยากทำจริงๆ) ในขณะที่ Instrumentation Test จะมี Resource ให้เรียกใช้งานเพื่อทำการเทสได้
ดังนั้นจึงทำให้ Unit Test สามารถเทสได้เลยโดยไม่ต้องพึ่งอุปกรณ์แอนดรอยด์ สามารถรันเทสได้ทันทีหลังจาก Build Project เสร็จเรียบร้อย แต่ Instrumentation Test นั้นจำเป็นต้องพึ่งอุปกรณ์แอนดรอยด์ในการเทส แต่ก็ไม่เหมือนกับ UI Automated Test นะ เพราะตอนเทสมันไม่ได้รันขึ้นมาเป็นหน้าจอแอปพลิเคชัน จะเป็นการเรียกใช้ Resource ของแอนดรอยด์เพื่อเอามาใช้ในการเทสแทน
ยกตัวอย่างเช่น เจ้าของบล็อกสร้างแอปพลิเคชันตอบคำถามแบบง่ายๆ โดยคำถามนั้นจะสร้างเป็น Model Class ขึ้นมา และคำถามที่เตรียมไว้จะเก็บไว้ใน String Resource จะสามารถแบ่งเขียนเทสได้คร่าวๆดังนี้
Instrumentation Test
• ทดสอบดึงข้อมูลจาก String Resource• ทดสอบการสร้าง Model คำถามจาก String Resource
• ทดสอบการเปลี่ยนคำถามข้อต่อไป
• ฯลฯ
Unit Test
• ทดสอบการสร้าง Model คำถามขึ้นมา• ทดสอบการตรวจสอบคำตอบที่ถูกต้อง
• ทดสอบการสลับตัวเลือกคำตอบ
• ฯลฯ
ถึงแม้ว่ามันคือ Unit Test เหมือนๆกัน แต่ก็ควรเขียนเทสแยกกันให้เหมาะสมกับแอปพลิเคชันของผู้ที่หลงเข้ามาอ่านนะครับ รวมไปถึงการแยกไฟล์ตามโมดูลหรือฟีเจอร์หรือฟังก์ชันด้วย เพื่อให้การเทสทำงานอย่างเป็นระบบจะได้จัดการได้ง่ายนะครับ
สำหรับ Unit Test สามารถอ่านเพิ่มเติมได้ที่ มาเขียน Unit test บน Android application กันเถอะ [somkiat.cc] และ Instrumentation Test สามารถอ่านเพิ่มเติมได้ที่ https://www.somkiat.cc/google-io-rewind-bangkok-2015/