หลังจากงาน Google IO 2017 มีการโชว์ของต่าง ๆ เกี่ยวกับการทดสอบ Android app
ตัวอย่างเช่น

  • Multiprocess Espresso
  • Android Test Orchestrator

เป็นความสามารถอยู่ใน Android Testing Support Library (ATSL) 1.0
ซึ่งตอนนี้ได้ปล่อยออกมาให้ใช้งานกันแล้ว
ดังนั้นมาดูกันว่ามีความสามารถอื่น ๆ อะไรบ้าง
รวมทั้งมาลองใช้งานกันดู

เริ่มด้วย Espresso มีการปรับปรุงเยอะเลย

ทำการปรับ version ใหม่เป็น Espresso 3.0
โดยความสามารถใหม่ ๆ ที่น่าสนใจมากคือ Multiprocess Espresso
ทำให้สามารถ run แยก process การทดสอบออกจาก process default ได้
แต่ใช้ได้เฉพาะกับ Android O (API 26) ขึ้นไป
ส่วนที่ต่ำกว่าก็ยังทำงานเช่นเดิม

ส่วนการเขียน code สำหรับการทดสอบ Android app ด้วย Espresso ยังคงเหมือนเดิม
เนื่องจากเป็นการเปลี่ยนแปลงภายในเท่านั้น
ซึ่งจะมีประโยชน์มาก ๆ สำหรับ app ที่มีขนาดใหญ่
แน่นอนว่าต้องเขียนชุดการทดสอบด้วย Espresso นะเออ !!

การทำงานเป็นดังรูป

ถึงตรงนี้ผมก็ยังไม่รู้ว่ามีประโยชน์อะไรชัดเจน !!
เพราะว่ายังไม่เข้าใจมากนัก
ดังนั้นมันต้องลองใช้งานดู

เริ่มด้วยต้องเปลี่ยนไปใช้ Google Maven Repository ก่อนนะ
และทำการเพิ่ม dependency เป็น Espresso 3.0 ดังนี้

จากนั้นทำการสร้างไฟล์ AndroidManifest.xml ใน folder /app/src/androidTest
เพื่อทำการกำหนดค่าต่าง ๆ ในการทดสอบ app ด้วย Multiprocess Espresso

ส่วนการเขียน code ยังคงเหมือนเดิม
ตรงนี้นักพัฒนาสบายใจได้

เพิ่ม Grant Permission Rule เข้ามาให้แล้ว

ตั้งแต่ Android M (API 23) ขึ้นมา
เปิดให้ app ทำการขอ permission ในขณะ runtime ได้
ดังนั้นในการทดสอบแบบเดิม
ถ้าเจอการขอ permission แบบนี้แล้ว การทดสอบ fail แน่ ๆ
ดังนั้น Espresso 3.0 จึงได้ทำการเพิ่ม GrantPermissionRule เข้ามา
เพื่อยกเลิก dialog ของการขอ permission ในขณะทดสอบออกไป
นั่นคือการจำลองว่า ผู้ใช้งานอนุญาตนั่นเอง !!

Android Test Orchestrator (Beta version)

โดยปกติการทดสอบผ่าน AndroidJUnitRunner นั้น
จะทำการ run ทุก ๆ testcase ใน process เดียวกัน
ดังนั้นทำให้เกิดปัญหามากมายตามมา เช่น

  • หยุดการทดสอบเมื่อเกิดปัญหา
  • มีการ share resource ต่าง ๆ เช่น ข้อมูลและสถานะต่าง ๆ ใน memory

ดังนั้น Android Test Orchestrator จึงมีเป้าหมายเพื่อแยกการทดสอบออกจากกัน
ดังนั้นจึงต้องระมัดระวังด้วยว่า app ของเรานั้นมีการ share ข้อมูลต่าง ๆ หรือไม่
มิเช่นนั้นการทดสอบจะพังได้แบบง่าย ๆ

การใช้งานต้องสั่งผ่าน command line นะ
สามารถดูเพิ่มเติมได้ที่ Android Test Orchestrator

แสดงผลการทำงานดังรูป

มีของใหม่ก็ต้องมีของที่ถูกเอาออกไป นั่นคือ Idling Resources

ซึ่งการเขียนส่วนใหญ่จะต้องทำการ custom
และส่งผลให้ Espresso ทำงานได้แย่มาก ๆ
ดังนั้นใน Espresso 3.0 จึงได้นำออกไป
และสร้างสิ่งใหม่ขึ้นมาที่มีประสิทธิภาพดีกว่าเดิมคือ Idling concurrent
ดังนั้นถ้าใครยังใช้พวก CountingIdlingResource อยู่ก็ตามไปแก้ไขกันเอาเองนะ

รวมทั้งเรื่องการทดสอบกับ ContentProvider

ก็ทำการเปลี่ยนจาก ProviderTestCase2 ไปเป็น ProviderTestRule
ซึ่งเป็นชื่อในรูปแบบเดียวกับส่วนอื่น ๆ เช่น ActivityTestRule เป็นต้น

อ่านเพิ่มเติมได้ที่ Android Testing

Reference Websites
https://android-developers.googleblog.com/2017/07/android-testing-support-library-10-is.html