หลังจากงาน Google IO 2017 มีการโชว์ของต่าง ๆ เกี่ยวกับการทดสอบ Android app
ตัวอย่างเช่น
- Multiprocess Espresso
- Android Test Orchestrator
เริ่มด้วย 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 ดังนี้ [gist id="15de4dcfbc8360af3f2b1f668d837da0" file="build.gradle"] จากนั้นทำการสร้างไฟล์ AndroidManifest.xml ใน folder /app/src/androidTest เพื่อทำการกำหนดค่าต่าง ๆ ในการทดสอบ app ด้วย Multiprocess Espresso [gist id="15de4dcfbc8360af3f2b1f668d837da0" file="AndroidManifest.xml"] ส่วนการเขียน 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
มีของใหม่ก็ต้องมีของที่ถูกเอาออกไป นั่นคือ Idling Resources
ซึ่งการเขียนส่วนใหญ่จะต้องทำการ custom และส่งผลให้ Espresso ทำงานได้แย่มาก ๆ ดังนั้นใน Espresso 3.0 จึงได้นำออกไป และสร้างสิ่งใหม่ขึ้นมาที่มีประสิทธิภาพดีกว่าเดิมคือ Idling concurrent ดังนั้นถ้าใครยังใช้พวก CountingIdlingResource อยู่ก็ตามไปแก้ไขกันเอาเองนะรวมทั้งเรื่องการทดสอบกับ ContentProvider
ก็ทำการเปลี่ยนจาก ProviderTestCase2 ไปเป็น ProviderTestRule ซึ่งเป็นชื่อในรูปแบบเดียวกับส่วนอื่น ๆ เช่น ActivityTestRule เป็นต้นอ่านเพิ่มเติมได้ที่ Android TestingReference Websites https://android-developers.googleblog.com/2017/07/android-testing-support-library-10-is.html