หลังจากที่ AndroidX Testing ถูกเพิ่มเข้ามาใน JetPack แล้ว
Version ล่าสุดของ AndroidX Testing คือ 1.0.0
ซึ่งมีการเปลี่ยนแปลงที่น่าสนใจดังนี้

  • เพิ่ม Robolectric 4.0 เข้ามา
  • ค่าของ minSdkVersion เป็น 14 และ targetSdkVersion เป็น 28
  • สนับสนุน Instant apps แล้ว

ตัวที่น่าสนใจสุดน่าจะเป็น การเพิ่ม Robolectric 4.0 เข้ามา

เนื่องจากสามารถทำให้ทดสอบส่วนการทำงานที่อยู่ใน Android SDK ได้ เช่น Activity, Context เป็นต้น
โดยไม่ต้องการ device หรือ emulator อีกด้วย
ส่งผลให้การทดสอบเร็วขึ้นเป็นอย่างมาก

แต่ไม่ได้บอกว่าต้องเปลี่ยนมาใช้ Robolectric หมดเลยนะ
เนื่องจากควรต้องมีการทดสอบแต่ละ layer หรือแต่ละส่วนเสมอ
ตามแนวคิดของ Pyramid testing นั่นเอง
เพื่อทำให้เรามีความั่นใจต่อ app ที่พัฒนา

มาดูตัวอย่างการใช้งานกันดีกว่า

เครื่องมือที่ใช้งานคือ Android Studio 3.4 Canary 3 นะ
จากนั้นก็สร้าง project และเลือก AndroidX Library ไปด้วยดังนี้

จากนั้นก็แก้ไขไฟล์ /app/build.gradle กันหน่อย

เพื่อทำการเพิ่ม depedency ต่าง ๆ ของ AndroidX Testing เข้าไป
เนื่องจาก Android Studio จะมีเพียง JUnit, Espresso core และ Espresso runner เท่านั้น
แน่นอนว่า มันยังไม่พอสำหรับเรา
ดังนั้นทำการแก้ไขดังนี้

คำอธิบาย
ทำการใส่ dependency สำหรับการทดสอบแบบ Unit testing และ Android testing
โดยสิ่งที่ต้องการคือ
การนำชุดการทดสอบจาก Android testing มาทดสอบใน Unit testing ด้วย Robolectric
แต่ข้อจำกัดของ Robolectric นั้นจะทำการทดสอบได้ Activity เดียวเท่านั้นนะ
ไม่สามารถข้าม Activity ได้

จากนั้นก็เขียนชุดการทดสอบ

คำอธิบาย
ในการเปิด Activity ขึ้นมานั้นจะใช้งาน ActivityScenario
แน่นอนว่า ใช้งานง่ายกว่า ActivityTestRule เยอะมาก ๆ
รวมทั้งสามารถช่วยจัดการ state ต่าง ๆ ของ Activity ได้อีกด้วย
นั่นคือ เราสามารถทดสอบใน state ต่าง ๆ ของ Activity ได้ง่ายอีกด้วย
มาลองใช้งานกันดู

ที่น่าสนใจคือ ถ้า run ชุดการทดสอบนี้ใน Unit testing แล้ว
จะทำการเรียกใช้งาน Robolectric ขึ้นมาให้แบบอัตโนมัติ
และใช้งานได้เหมือนกัน แต่ทำงานเร็วกว่า แค่นั้นเอง

ตัวอย่าง source code ของ project ตัวอย่างอยู่ที่ Github:Up1::Demo

สุดท้ายแล้ว AndroidX Testing Library นั้น open source แล้วนะ
ลองไปดูและศึกษากันได้

วันนี้นักพัฒนา Android App เขียน test กันไหมนะ ?
ถ้ายังไม่เขียน ก็เขียนซะ !!!

Reference Websites
https://medium.com/androiddevelopers/write-once-run-everywhere-tests-on-android-88adb2ba20c5
https://developer.android.com/training/testing/release-notes
https://developer.android.com/training/testing/