เพราะเราอยู่ในยุคที่ไม่ถามกันแล้วว่าเขียนโค้ดแล้วต้องเขียนเทสมั้ย แต่เปลี่ยนมาถามกันว่าจะเขียนเทสต้องทำอะไรบ้าง ซึ่งแน่นอนว่าการเขียนโค้ดบนแอนดรอยด์ในยุคนี้ก็ควรเขียนเทสให้เป็นด้วยเช่นกัน
ดังนั้นในบทความนี้เจ้าของบล็อกจะมาเล่าถึงวิธีการเขียน Unit Test บน Android Studio กัน
บทความที่เกี่ยวข้อง
- เรื่องที่ควรรู้เกี่ยวกับการเขียนเทสบนแอนดรอยด์
- Unit Test กับ Instrumented Test บน Android Studio ต่างกันอย่างไร
- มาเขียน Unit Test บน Android Studio กัน [Now Reading]
- มาเขียน Instrumented Test บน Android Studio กัน
- Context กับ Target Context ใน Instrumented Test ไม่เหมือนกันนะ
- UI Test บน Android ของทุกคนอาจจะไม่เหมือนกันเสมอไป
- การส่ง Test Double ด้วย Koin ในคลาส Application เพื่อทำ UI Test
Unit Test บน Android Studio
การเขียน Unit Test ให้กับโปรเจคบนแอนดรอยด์นั้นจะต้องทำผ่าน Flavor ที่ชื่อว่า test
โดยจะอยู่ใน <module>/src/test
(ส่วนโค้ดทั่วไปจะอยู่ใน <module>/src/main
)
![](https://akexorcist.dev/content/images/2022/04/write_unit_test_in_android-002.webp)
ถ้าในหน้าต่าง Project เลือกแสดงผลแบบ Android ก็จะเห็นว่า Directory ของ test
ถูก Highlight ด้วยสีเขียว เพื่อบอกให้รู้ว่าเป็น Flavor สำหรับการเขียนเทสนั่นเอง
![](https://akexorcist.dev/content/images/2022/04/write_unit_test_in_android-001.webp)
และบน Android Studio จะสร้างไฟล์ตัวอย่างสำหรับการเขียน Unit Test เมื่อสร้างโปรเจคขึ้นมาใหม่ให้ทุกครั้ง โดยจะตั้งไฟล์ที่ชื่อว่า ExampleUnitTest
JUnit กับการเขียน Unit Test
การเขียนเทสในโปรเจคแอนดรอยด์จะใช้ JUnit เหมือนกับโปรเจค Java/Kotlin ทั่วไป และในตอนแรกเริ่มที่สร้างโปรเจคขึ้นมาใหม่ Android Studio เลือกใช้เป็น JUnit 4 ให้ ซึ่งนักพัฒนาก็สามารถเลือกเองได้ว่าจะเปลี่ยนไปใช้เป็น JUnit 5 แทน หรือว่าใช้ JUnit 4 ต่อไปก็ได้เช่นกัน
รูปแบบในการทำงานของ Unit Test บน Android Studio
เวลานักพัฒนากดสั่งให้โค้ดสำหรับ Unit Test เริ่มทำงานหรือที่เรียกกันว่ารันเทส บน Android Studio จะมีให้เลือกทั้งหมด 3 แบบด้วยกัน
![](https://akexorcist.dev/content/images/2022/04/write_unit_test_in_android-003.webp)
Run '<test_name>'
เป็นการรันเทสแบบปกติ เพื่อดูว่าทำงานถูกต้องหรือไม่ และแสดงผลลัพธ์ในตอนท้ายDebug '<test_name>'
เป็นการรันเทสแบบเปิด Debugger ด้วย เพื่อช่วยให้นักพัฒนาสามารถวิเคราะห์ปัญหาได้ง่ายในเวลาที่โค้ดสำหรับ Unit Test เกิดข้อผิดพลาดRun '<test_name>' with Coverage
เป็นการรันเทสเหมือนกับแบบปกติ แต่ว่ามีการเก็บข้อมูลของโค้ดที่รันเทสเพื่อนำมาแสดงผลเป็น Test Coverage ให้ดูด้วย
และนอกจากนี้ยังกำหนดรูปแบบในการรันเทสด้วยตัวเองผ่านเมนู Modify Run Configuration...
ได้อีกด้วยนะ
การสั่งให้โค้ดทำการรันเทสบน Android Studio
บน Android Studio จะมีหลายวิธีเพื่อสั่งให้เทสเริ่มทำงาน โดยขึ้นอยู่กับว่านักพัฒนาต้องการสั่งให้โค้ดส่วนไหนบ้างที่จะรันเทส
รันเทสเพียงแค่ตัวเดียว
กรณีที่ต้องการรันเทสแค่เพียง Test Case เดียว สามารถกดที่เครื่องหมายที่อยู่ข้างหน้า Test Function นั้น ๆ ได้เลย
![](https://akexorcist.dev/content/images/2022/04/write_unit_test_in_android-004-1.webp)
รันเทสทั้งหมดที่อยู่ในคลาส
ถ้ากดเครื่องหมายที่อยู่ข้างหน้า Test Class แทน Test Function จะเป็นการรันเทสทั้งหมดที่อยู่ในคลาสนั้น ๆ แทน
![](https://akexorcist.dev/content/images/2022/04/write_unit_test_in_android-007.webp)
สำหรับการเขียน Unit Test จะนิยมเขียนแค่ 1 คลาสต่อ 1 ไฟล์เท่านั้น
รันเทสทั้งหมดที่อยู่ในไฟล์
ถ้าคลิกขวาที่ไฟล์ในหน้าต่าง Project จะสามารถสั่งให้รันเทสทั้งหมดที่อยู่ในไฟล์นั้น ๆ ได้ทันที
![](https://akexorcist.dev/content/images/2022/04/write_unit_test_in_android-005-1.webp)
และถ้าเปิดไฟล์อยู่ก็สามารถคลิกขวาที่แถบข้างบนของไฟล์นั้น ๆ เพื่อสั่งรันเทสได้เช่นกัน
![](https://akexorcist.dev/content/images/2022/04/write_unit_test_in_android-006.webp)
รันเทสที่เคยรันไปแล้วก่อนหน้านี้
ทุกครั้งที่นักพัฒนากดรันเทสใด ๆ ก็ตาม Android Studio จะสร้างเป็น Run Configuration ไว้ให้เสมอ ดังนั้นนักพัฒนาจึงสามารถกดเลือกจากหน้าต่าง Run Configuration ข้างบนแล้วกดปุ่ม Run เหมือนกับการรันแอปตามปกติได้เลย (สามารถเลือกเป็น Debug หรือ Run with Coverage จากปุ่มที่อยู่ข้าง ๆ ได้เหมือนกัน)
![](https://akexorcist.dev/content/images/2022/04/write_unit_test_in_android-008.webp)
หลังจากรันเทสใด ๆ แล้ว ถ้าต้องการรันแอปเพื่อทดสอบตามปกติ ก็อย่าลืมเลือกใน Run Configuration เพื่อให้รันแอปแทนด้วยนะ
Library สำหรับการเขียน Unit Test
Test Framework
Mocking Library
Assertion Library
สรุป
ในปัจจุบันการเขียน Unit Test ถือว่าเป็นส่วนสำคัญอย่างหนึ่งสำหรับการพัฒนาโปรแกรมใด ๆ ก็ตาม รวมไปถึงการพัฒนาแอปบนแอนดรอยด์ด้วยเช่นกัน โดยเฉพาะแอปที่มีขนาดใหญ่และการทำงานที่ซับซ้อน เพื่อให้นักพัฒนาสามารถเขียนโค้ดเพิ่มหรือแก้ไขโค้ดเดิมที่มีอยู่ได้อย่างมั่นใจ สุดท้ายแล้วก็ต้องเขียนเทสนั่นเอง
ดังนั้น มาเขียนเทสให้กับโค้ดของเรากันเถอะ 😉