หลังจากที่เขียนอธิบายเรื่อง การเขียน Unit test สำหรับ Android application ไปแล้ว
ครั้งนี้เรามาดู การทดสอบในระดับที่สูงขึ้นมา
ซึ่งถ้าไปดูเรื่องการทดสอบ มันจะมีเยอะมากๆ
โดยในตอนนี้ขอแนะนำ UI Test ก็แล้วกัน มันชื่อว่า Espresso
มาดูกันว่า มันคืออะไร และ ใช้งานอย่างไร ?
Espresso คืออะไร ?
แน่นอนว่า มันคงไม่ใช่กาแฟนะครับ !!!
แต่มันคือ Android UI Test ซึ่งสร้างโดยทีมพัฒนาของ Google นั่นเอง
เปิดตัวมาตั้งแต่งาน Google Test Automation Conference 2013 โน่นเลย
และแน่นอนมันเป็น open source project ให้เราใช้งานกันแบบฟรีๆ
รวมทั้งมีชุดของ APIs ให้เราใช้งานกันแบบง่ายๆ
ทำไมเราต้องใช้งาน Espresso ด้วยล่ะ ?
จากที่ใช้งานมา พบว่า มันติดตั้งง่ายมากๆ
มีชุด APIs ที่ใช้งานง่าย แถมงอ่านง่ายอีก (อยากรู้ก็ต้องลองใช้สิ)
ที่สำคัญ มันทำงานเร็วมากๆ ด้วยนะ
Espresso มีความสามารถอะไรบ้าง ?
- มันทำงานอยู่บน Android Instrument Framework
- ใช้งานได้กับ Emulator และ มือถือจริงๆ
- ใช้งาน Hamcrest matcher library ซึ่งเราสามารถ custom ได้ด้วย
- มีความน่าเชื่อถือสูงเลยนะ เพราะว่าการทำงานมันจะ sync กับ UI Thread
Espresso มีข้อเสียอะไรบ้าง ?
- มันไม่รองรับ Webview นะสิ
- ไม่มี function สำหรับการ capture หน้าจอ ( แต่สามารถ custom ได้นะ ยากหน่อย )
- ต้องการความสามารถด้วย programming พอสมควร
Espresso สามารถทดสอบบน API version เหล่านี้ได้
- 8 => Froyo
- 10 => Gingerbread
- 15 => Ice Cream Sandwich
- 16, 17, 18 => Jelly Bean
- 19 => KitKat
- 21 => Lollipop
มาใช้งาน Espresso กันดีกว่า
1. ทำการติดตั้งด้วยการ config ค่าต่างๆ ในไฟล์ build.gradle ของระบบงานเรา
เริ่มด้วยการเพิ่ม espresso library เข้ามาใน project
จากนั้นทำการเพิ่ม Instrument runner ดังนี้
2. ทำความรู้จักกับ API ของ Espresso กันนิดหน่อย
เราสามารถใช้งานผ่าน method onView() หรือ onData()
จากนั้นเรียกใช้งานผ่าน method perform() ได้เลย
เช่น
เราต้องการกดปุ่ม id=convert เราสามารถเขียน code ได้ดังนี้
เราต้องการตรวจสอบว่า id=myText นั้นมีค่าตามที่คาดหวังไว้หรือไม่
สามารถเขียน code ได้ดังนี้
3. มาดูตัวอย่างที่ผมต้องการ มีขั้นตอนการทำงานดังนี้
- เปิด application ขึ้นมา
- กรอกคะแนน 50 เข้าไป
- ทำการกดปุ่ม convert เพื่อทำการคำนวณเกรด
- แสดงผลออกมาที่หน้าจอว่า Your grade = D
สามารถเขียน code การทดสอบแบบง่ายๆด้วย Espresso ดังนี้
สั่งให้ทำการทดสอบด้วยคำสั่ง
$./gradlew :App:connectedAndroidTest
ผลการทำงานเป็นดังรูป
และ Gradle จะทำการสร้าง report แบบนี้ขึ้นมาให้ด้วย
ตัวอย่างของ source code อยู่ที่
Github :: Up1 :: Demo android grade converter
การทดสอบบน Android application มันมีทางเลือกให้เยอะเลย
ลองดูนะครับ ว่าอะไรที่มันเหมาะสมกับเรา