ในการพัฒนาแอปพลิเคชันใดๆก็ตาม ควรมีการเขียนเทสเพื่อให้มั่นใจว่าโค้ดของผู้ที่หลงเข้ามาอ่านจะทำงานได้ถูกต้อง ครอบคลุมกับ Requirement และลดจำนวนบั๊กให้น้อยลง

การเขียนเทสปกติก็จะมีอยู่ 2 แบบด้วยกันคือ Unit Test และ UI Automated Test แต่ทว่าการทำ Unit Test บน Android Studio นั้นจะแบ่งออกมาเป็น 2 ส่วนด้วยกันคือ Local Unit Test และ Instrumentation Test

แล้ว Local Unit Test กับ Instrumentation Test นี่มันต่างกันยังไงล่ะ?

ถึงแม้ว่าทั้งคู่จะเป็น Unit Test เหมือนกัน แต่

  • Local Unit Test จะเป็นการทดสอบ Logic ของโค้ดพื้นฐานที่ทำงานได้เลยบน JVM อย่างเช่น Model Class, Business Logic หรือ Utility Class
  • Instrumentation Test เป็นการทดสอบการทำงานของโค้ดที่เกี่ยวข้องกับ Lifecycle, Event หรือ Resource ของแอนดรอยด์

จึงต่างกันเพียงแต่ว่า Local Unit Test จะเข้าถึง Resource ของแอนดรอยด์ไม่ได้ ในขณะที่ Instrumentation Test จะมี Resource ให้เรียกใช้งานเพื่อทำการเทสได้

ในปัจจุบันมีเครื่องมืออย่าง Robolectric เข้ามาช่วยในการ Mock Android Resource เพื่อแทสบน Local Unit Test ได้แล้ว

ดังนั้นจึงทำให้ Local Unit Test สามารถเทสได้เลยโดยไม่ต้องพึ่งอุปกรณ์แอนดรอยด์ สามารถรันเทสได้ทันทีหลังจาก Build Project เสร็จเรียบร้อย แต่ Instrumentation Test นั้นจำเป็นต้องพึ่งอุปกรณ์แอนดรอยด์ในการเทส เพื่อดึง Resource ของแอนดรอยด์มาใช้ในการเทส (แต่ไม่ได้รันขึ้นมาเป็น UI แบบ UI Automated Test)

ยกตัวอย่างเช่น เจ้าของบล็อกสร้างแอปพลิเคชันตอบคำถามแบบง่ายๆ โดยคำถามนั้นจะสร้างเป็น Model Class ขึ้นมา และคำถามที่เตรียมไว้จะเก็บไว้ใน String Resource จะสามารถแบ่งเขียนเทสได้คร่าวๆดังนี้

Instrumentation Test

  • ทดสอบดึงข้อมูลจาก String Resource
  • ทดสอบการสร้าง Model คำถามจาก String Resource
  • ทดสอบการเปลี่ยนคำถามข้อต่อไป
  • ฯลฯ

Local Unit Test

  • ทดสอบการสร้าง Model คำถามขึ้นมา
  • ทดสอบการตรวจสอบคำตอบที่ถูกต้อง
  • ทดสอบการสลับตัวเลือกคำตอบ
  • ฯลฯ

ถึงแม้ว่ามันคือ Unit Test เหมือนๆกัน แต่ก็ควรเขียนเทสแยกกันให้เหมาะสมกับแอปพลิเคชันของผู้ที่หลงเข้ามาอ่านนะครับ รวมไปถึงการแยกไฟล์ตาม​ Module, Feature หรือ Function ด้วย เพื่อให้การเทสทำงานอย่างเป็นระบบจะได้จัดการได้ง่ายนะครับ

สำหรับ Unit Test สามารถอ่านเพิ่มเติมได้ที่ มาเขียน Unit test บน Android application กันเถอะ [somkiat.cc] และ Instrumentation Test สามารถอ่านเพิ่มเติมได้ที่ https://www.somkiat.cc/google-io-rewind-bangkok-2015/