การสร้างชุดการทดสอบแบบอัตโนมัติระดับ User Interface ของ Android app นั้น
เป็นเรื่องที่สำคัญมาก ๆ โดยที่ทาง Android ก็ได้เตรียมเครื่องมือและ library ต่าง ๆ ไว้ให้ครบ
ยกตัวอย่างเช่น Espresso และ UIAutomator เป็น
ที่สำคัญยังมี opensource library อื่น ๆ อีก
ไม่ว่าจะเป็น Appium และ Calabash
ดังนั้นการสร้างชุดการทดสอบแบบอัตโนมัติจึงไม่ใช่เรื่องยากหรือเป็นไปไม่ได้เลย
แต่เหล่าทีมพัฒนามักไม่ชอบทำ !!
ทำไมนะ ?
ปกติการเขียน UI Test ของ Android app นั้น
มักจะเขียนด้วย library ที่ชื่อว่า
Espresso
ซึ่งสามารถทดสอบ Android app ได้เกือบครบทั้งหมด
การใช้งานก็ไม่ยาก
ยกตัวอย่างด้วยภาษา Kotlin ดังนี้
[gist id="d12656c1a3236e9d90609aa15e83e066" file="1.kt"]
คำอธิบาย
ทำการตรวจสอบ element id=username ว่าแสดงผลหรือไม่
ทำการกดปุ่ม id=login_button
ทำการกรอข้อมูล Hello ใน element id=name_field
ทุกอย่างดูเป็นปกติ และทำงานได้ตามที่ต้องการ
แต่เมื่อการทดสอบเริ่มซับซ้อนขึ้น ขั้นตอนการทำงานมากขึ้น
ส่งผลทำให้ code ของ UI Test ที่เขียนขึ้นมานั้น
อ่านลำบาก
แก้ไขยาก
ยิ่งจำนวน test case เยอะขึ้น ปัญหาก็ตามมาเพียบ
ทำให้คนเขียนมักจะเป็น developer/programmer
ทำให้งานเพิ่มอีกแล้ว
แน่นอนว่า มันคือปัญหา classic สุด ๆ
ยกตัวอย่างเช่น
[gist id="d12656c1a3236e9d90609aa15e83e066" file="2.java"]
ดังนั้นเราน่าจะต้องการวิธีการใหม่ ๆ เข้ามาช่วยนะ
ยิ่งการพัฒนา Android นั้นมีทางเลือกทั้งภาษา Java และ
Kotlin
น่าจะทำให้เรามีทางเลือกมากขึ้น
ซึ่งตอนนี้มีคนสร้าง library ด้วยภาษา Kotlin
เพื่อทำให้การเขียน UI Test ด้วย Espresso ง่ายขึ้น
ด้วยการเขียนในรูปภาษาที่ง่าย ๆ
เป็น DSL หรือภาษาเฉพาะขึ้นมา
จาก code ด้านบน ถ้าเราสามารถเขียนง่าย ๆ ด้วย DSL ง่าย ๆ แบบนี้
น่าจะทำให้การเขียน UI Test ง่ายและสนุกขึ้นหรือไม่
แน่นอนว่า ทำให้ง่ายได้อ่านขึ้นเยอะ
รวมทั้งใคร ๆ ก็สามารถเขียนได้
ยกตัวอย่างเช่น
[gist id="d12656c1a3236e9d90609aa15e83e066" file="3.kt"]
โดยมีคนทำ library ในรูปแบบนี้ให้ด้วยนะ
จึงนำมาแนะนำไว้ เผื่อว่าจะนำไปใช้กัน
ประกอบไปด้วย
จากทั้ง 3 ตัวนั้น Kakao น่าใช้งานสุด
ซึ่งลองใช้งานก็ไม่ได้ยากอะไร
แต่อาจจะติดตั้งยากขึ้นมาหน่อย
ยิ่งถ้าต้องทดสอบระบบที่พัฒนาด้วยภาษา Java แล้ว
ต้องทำให้ Android project สนับสนุนภาษา Kotlin ก่อนด้วยนะ
ตัวอย่างของการเขียนด้วย Kakao
[gist id="d12656c1a3236e9d90609aa15e83e066" file="4.kt"]
ขอให้สนุกกับการ coding ครับ