สิ่งที่ควรทดสอบใน Android

สิ่งที่ควรทดสอบจะขึ้นอยู่กับปัจจัยต่างๆ เช่น ประเภทแอป ทีมพัฒนา จำนวนโค้ดเดิม และสถาปัตยกรรมที่ใช้ ส่วนต่อไปนี้จะกล่าวถึงสิ่งที่ผู้เริ่มต้นอาจต้องพิจารณาเมื่อวางแผนสิ่งที่จะทดสอบในแอป

การจัดระเบียบไดเรกทอรีทดสอบ

โปรเจ็กต์ทั่วไปใน Android Studio จะมีไดเรกทอรี 2 ไดเรกทอรีที่มีชุดทดสอบ ขึ้นอยู่กับสภาพแวดล้อมการเรียกใช้ จัดระเบียบการทดสอบในไดเรกทอรีต่อไปนี้ตามที่อธิบายไว้

  • ไดเรกทอรี androidTest ควรมีการทดสอบที่ทำงานบนอุปกรณ์จริงหรือเสมือนจริง การทดสอบดังกล่าวรวมถึงการทดสอบการผสานรวม การทดสอบจากต้นทางถึงปลายทาง และการทดสอบอื่นๆ ที่ JVM เพียงอย่างเดียวไม่สามารถตรวจสอบฟังก์ชันการทำงานของแอปได้
  • testไดเรกทอรีควรมีการทดสอบที่ทำงานบนเครื่องของคุณ เช่น การทดสอบ 1 หน่วย ซึ่งแตกต่างจากข้างต้นตรงที่อาจเป็นการทดสอบที่ทํางานใน JVM ในพื้นที่

การทดสอบ 1 หน่วยที่สําคัญ

เมื่อทําตามแนวทางปฏิบัติแนะนํา คุณควรใช้การทดสอบหน่วยในกรณีต่อไปนี้

  • การทดสอบหน่วยสําหรับ ViewModel หรือตัวนําเสนอ
  • การทดสอบหน่วยสําหรับเลเยอร์ข้อมูล โดยเฉพาะที่เก็บ เลเยอร์ข้อมูลส่วนใหญ่ควรเป็นแพลตฟอร์มที่ไม่ขึ้นอยู่กับแพลตฟอร์ม ซึ่งจะช่วยให้การทดสอบใช้ข้อมูลจำลองแทนที่โมดูลฐานข้อมูลและแหล่งข้อมูลระยะไกลในการทดสอบได้ ดูคู่มือเกี่ยวกับการใช้ Test Double ใน Android
  • การทดสอบหน่วยสําหรับเลเยอร์อื่นๆ ที่ไม่ขึ้นอยู่กับแพลตฟอร์ม เช่น เลเยอร์โดเมน เช่นเดียวกับ Use Case และอินเทอร์แอกเตอร์
  • การทดสอบหน่วยสําหรับคลาสยูทิลิตี เช่น การจัดการสตริงและคณิตศาสตร์

การทดสอบกรณีสุดโต่ง

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

  • การดำเนินการทางคณิตศาสตร์โดยใช้จำนวนลบ ศูนย์ และเงื่อนไขขอบเขต
  • ข้อผิดพลาดทั้งหมดที่อาจเกิดขึ้นในการเชื่อมต่อเครือข่าย
  • ข้อมูลที่เสียหาย เช่น JSON ที่มีรูปแบบไม่ถูกต้อง
  • การจําลองพื้นที่เก็บข้อมูลเต็มเมื่อบันทึกลงในไฟล์
  • ออบเจ็กต์ที่สร้างใหม่ในระหว่างกระบวนการ (เช่น กิจกรรมเมื่อหมุนอุปกรณ์)

การทดสอบ 1 หน่วยที่ควรหลีกเลี่ยง

คุณควรหลีกเลี่ยงการทดสอบหน่วยบางรายการเนื่องจากมีคุณค่าต่ำ

  • การทดสอบที่ยืนยันการทํางานของเฟรมเวิร์กหรือไลบรารีที่ถูกต้อง ไม่ใช่โค้ดของคุณ
  • จุดแรกเข้าของเฟรมเวิร์ก เช่น กิจกรรม ฟragment หรือบริการ ไม่ควรมีตรรกะทางธุรกิจ คุณจึงไม่ควรให้ความสําคัญกับการทดสอบหน่วย การทดสอบหน่วยสําหรับกิจกรรมไม่ค่อยมีประโยชน์ เนื่องจากจะครอบคลุมโค้ดเฟรมเวิร์กเป็นส่วนใหญ่และต้องมีการตั้งค่าที่ซับซ้อนมากขึ้น การทดสอบที่มีเครื่องมือวัด เช่น การทดสอบ UI จะครอบคลุมคลาสเหล่านี้ได้

การทดสอบ UI

การทดสอบ UI ที่คุณควรใช้มีหลายประเภท ดังนี้

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

การทดสอบอื่นๆ

นอกจากนี้ยังมีการทดสอบเฉพาะทางอื่นๆ เช่น การทดสอบภาพหน้าจอ การทดสอบประสิทธิภาพ และการทดสอบด้วย Monkey นอกจากนี้ คุณยังจัดหมวดหมู่การทดสอบตามวัตถุประสงค์ เช่น การถดถอย การช่วยเหลือพิเศษ และความเข้ากันได้ได้ด้วย

อ่านเพิ่มเติม

หากต้องการทดสอบแบบแยกส่วน บ่อยครั้งที่คุณต้องแทนที่การพึ่งพาของสิ่งที่จะทดสอบด้วยการพึ่งพาจำลองหรือจำลอง ซึ่งโดยทั่วไปเรียกว่า "Test Doubles" อ่านต่อเกี่ยวกับข้อมูลดังกล่าวได้ในการใช้ Test Doubles ใน Android

หากต้องการดูวิธีสร้างการทดสอบหน่วยและการทดสอบ UI โปรดดูTesting codelabs