หลังจากงาน 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