เพราะเราอยู่ในยุคที่ไม่ถามกันแล้วว่าเขียนโค้ดแล้วต้องเขียนเทสมั้ย แต่เปลี่ยนมาถามกันว่าจะเขียนเทสต้องทำอะไรบ้าง ซึ่งแน่นอนว่าการเขียนโค้ดบนแอนดรอยด์ในยุคนี้ก็ควรเขียนเทสให้เป็นด้วยเช่นกัน

ดังนั้นในบทความนี้เจ้าของบล็อกจะมาเล่าถึงวิธีการเขียน Unit Test บน Android Studio กัน

บทความที่เกี่ยวข้อง

Unit Test บน Android Studio

การเขียน Unit Test ให้กับโปรเจคบนแอนดรอยด์นั้นจะต้องทำผ่าน Flavor ที่ชื่อว่า test โดยจะอยู่ใน <module>/src/test (ส่วนโค้ดทั่วไปจะอยู่ใน <module>/src/main)

ถ้าในหน้าต่าง Project เลือกแสดงผลแบบ Android ก็จะเห็นว่า Directory ของ test ถูก Highlight ด้วยสีเขียว เพื่อบอกให้รู้ว่าเป็น Flavor สำหรับการเขียนเทสนั่นเอง

และบน 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 แบบด้วยกัน

  • 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 นั้น ๆ ได้เลย

รันเทสทั้งหมดที่อยู่ในคลาส

ถ้ากดเครื่องหมายที่อยู่ข้างหน้า Test Class แทน Test Function จะเป็นการรันเทสทั้งหมดที่อยู่ในคลาสนั้น ๆ แทน

สำหรับการเขียน Unit Test จะนิยมเขียนแค่ 1 คลาสต่อ 1 ไฟล์เท่านั้น

รันเทสทั้งหมดที่อยู่ในไฟล์

ถ้าคลิกขวาที่ไฟล์ในหน้าต่าง Project จะสามารถสั่งให้รันเทสทั้งหมดที่อยู่ในไฟล์นั้น ๆ ได้ทันที

และถ้าเปิดไฟล์อยู่ก็สามารถคลิกขวาที่แถบข้างบนของไฟล์นั้น ๆ เพื่อสั่งรันเทสได้เช่นกัน

รันเทสที่เคยรันไปแล้วก่อนหน้านี้

ทุกครั้งที่นักพัฒนากดรันเทสใด ๆ ก็ตาม Android Studio จะสร้างเป็น Run Configuration ไว้ให้เสมอ ดังนั้นนักพัฒนาจึงสามารถกดเลือกจากหน้าต่าง Run Configuration ข้างบนแล้วกดปุ่ม Run เหมือนกับการรันแอปตามปกติได้เลย (สามารถเลือกเป็น Debug หรือ Run with Coverage จากปุ่มที่อยู่ข้าง ๆ ได้เหมือนกัน)

หลังจากรันเทสใด ๆ แล้ว ถ้าต้องการรันแอปเพื่อทดสอบตามปกติ ก็อย่าลืมเลือกใน Run Configuration เพื่อให้รันแอปแทนด้วยนะ

Library สำหรับการเขียน Unit Test

Test Framework

Mocking Library

Assertion Library

สรุป

ในปัจจุบันการเขียน Unit Test ถือว่าเป็นส่วนสำคัญอย่างหนึ่งสำหรับการพัฒนาโปรแกรมใด ๆ ก็ตาม รวมไปถึงการพัฒนาแอปบนแอนดรอยด์ด้วยเช่นกัน โดยเฉพาะแอปที่มีขนาดใหญ่และการทำงานที่ซับซ้อน เพื่อให้นักพัฒนาสามารถเขียนโค้ดเพิ่มหรือแก้ไขโค้ดเดิมที่มีอยู่ได้อย่างมั่นใจ สุดท้ายแล้วก็ต้องเขียนเทสนั่นเอง

ดังนั้น มาเขียนเทสให้กับโค้ดของเรากันเถอะ 😉