ผู้ให้บริการเนื้อหาทดสอบ

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

สร้างการทดสอบการผสานรวมสำหรับผู้ให้บริการเนื้อหา

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

หากต้องการทดสอบผู้ให้บริการเนื้อหาแยกต่างหาก ให้ใช้ ProviderTestCase2 คลาสนี้จะให้คุณใช้คลาสออบเจ็กต์จำลองของ Android ได้ เช่น IsolatedContext และ MockContentResolver เพื่อเข้าถึงไฟล์และ ข้อมูลฐานข้อมูลได้โดยไม่ส่งผลกระทบต่อข้อมูลผู้ใช้จริง

คุณควรเขียนแบบทดสอบการผสานรวมเป็นคลาสการทดสอบ JUnit 4 เพื่อดูข้อมูลเพิ่มเติม เกี่ยวกับการสร้างคลาสทดสอบ JUnit 4 และการใช้การยืนยัน JUnit 4 โปรดดูสร้าง ชั้นเรียนทดสอบหน่วยในเครื่อง (Local Unit Test Class)

ในการสร้างการทดสอบการผสานรวมสำหรับผู้ให้บริการเนื้อหาของคุณ คุณต้องดำเนินการต่อไปนี้ ขั้นตอน:

  1. สร้างคลาสการทดสอบเป็นคลาสย่อยของ ProviderTestCase2
  2. ระบุคลาส AndroidJUnitRunner ที่ AndroidX Test มีให้ เป็นตัวดำเนินการทดสอบเริ่มต้นของคุณ
  3. ตั้งค่าออบเจ็กต์ Context จากคลาส ApplicationProvider โปรดดู ดังตัวอย่างด้านล่าง

Kotlin


@Throws(Exception::class)
override fun setUp() {
  super.setUp()
  context = ApplicationProvider.getApplicationContext<Context>()
}

Java


@Override
protected void setUp() throws Exception {
  super.setUp();
  setContext(ApplicationProvider.getApplicationContext());
}

วิธีการทำงานของ ProviderTestCase2

คุณทดสอบผู้ให้บริการที่มีคลาสย่อยเป็น ProviderTestCase2 คลาสฐานนี้ ขยาย AndroidTestCase ดังนั้นจึงมีเฟรมเวิร์กการทดสอบ JUnit ดัง และวิธีการทดสอบสิทธิ์ของแอปพลิเคชันโดยเฉพาะ Android มากที่สุด คุณลักษณะสำคัญของคลาสนี้คือการเริ่มต้น ซึ่งสร้าง แยกสภาพแวดล้อมการทดสอบ

การเริ่มต้น

การเริ่มต้นจะดำเนินการในเครื่องมือสร้างสำหรับ ProviderTestCase2 ที่คลาสย่อยเรียกตัวสร้างของตัวเอง ProviderTestCase2 เครื่องมือสร้างสร้างออบเจ็กต์ IsolatedContext ที่ทำให้ไฟล์และ การดำเนินการฐานข้อมูลแต่แยกการโต้ตอบอื่นๆ กับระบบ Android การดำเนินการเกี่ยวกับไฟล์และฐานข้อมูลจะเกิดขึ้นในไดเรกทอรีที่ ของอุปกรณ์หรือโปรแกรมจำลอง และมีคำนำหน้าพิเศษ

จากนั้นเครื่องมือสร้างจะสร้าง MockContentResolver เพื่อใช้เป็นรีโซลเวอร์ ในการทดสอบ

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

คุณทำการทดสอบการผสานรวมสำหรับผู้ให้บริการเนื้อหาด้วยวิธีเดียวกับที่ทำการวัดคุม การทดสอบ 1 หน่วย

สิ่งที่จะทดสอบ

หลักเกณฑ์เฉพาะสำหรับการทดสอบผู้ให้บริการเนื้อหามีดังนี้

  • ทดสอบด้วยเมธอดรีโซลเวอร์: แม้ว่าคุณจะสร้างอินสแตนซ์ผู้ให้บริการได้ ออบเจ็กต์ ใน ProviderTestCase2 คุณควรทดสอบด้วยออบเจ็กต์รีโซลเวอร์ทุกครั้งโดยใช้ URI ที่เหมาะสม วิธีนี้จะช่วยให้มั่นใจได้ว่าคุณกำลังทดสอบผู้ให้บริการโดย ทำการโต้ตอบแบบเดียวกับที่แอปพลิเคชันทั่วไปใช้
  • ทดสอบผู้ให้บริการสาธารณะเป็นสัญญา: หากคุณตั้งใจให้ผู้ให้บริการเป็น เผยแพร่ต่อสาธารณะและพร้อมใช้งานสำหรับแอปพลิเคชันอื่น คุณควรทดสอบการใช้งานในรูปแบบสัญญา ตัวอย่างวิธีดำเนินการมีดังนี้
    • ทดสอบด้วยค่าคงที่ที่ผู้ให้บริการเปิดเผยต่อสาธารณะ ตัวอย่างเช่น ดู สำหรับค่าคงที่ที่อ้างอิงชื่อคอลัมน์ในตารางข้อมูลของผู้ให้บริการ ค่านี้ควรเป็นค่าคงที่ที่ผู้ให้บริการระบุต่อสาธารณะเสมอ
    • ทดสอบ URI ทั้งหมดที่ผู้ให้บริการของคุณมีให้ ผู้ให้บริการอาจมีการเสนอราคา URI โดยแต่ละรายการจะอ้างอิงถึงแง่มุมที่แตกต่างกันของข้อมูล
    • ทดสอบ URI ที่ไม่ถูกต้อง การทดสอบหน่วยของคุณควรโทรติดต่อผู้ให้บริการโดยตั้งใจ URI ที่ไม่ถูกต้อง แล้วหาข้อผิดพลาด การออกแบบผู้ให้บริการที่ดีคือการส่งคำขอ IllegalArgumentException สำหรับ URI ที่ไม่ถูกต้อง
  • ทดสอบการโต้ตอบกับผู้ให้บริการมาตรฐาน: ผู้ให้บริการส่วนใหญ่ให้สิทธิ์เข้าถึง 6 อย่าง เมธอด: query(), insert(), delete(), update(), getType() และ onCreate() การทดสอบของคุณควรยืนยันว่าวิธีทั้งหมดนี้ใช้ได้ผล
  • ทดสอบตรรกะทางธุรกิจ: หากผู้ให้บริการเนื้อหาใช้ตรรกะทางธุรกิจ คุณ ควรทดสอบ ตรรกะทางธุรกิจรวมถึงการจัดการมูลค่าที่ไม่ถูกต้อง ทางการเงิน หรือ การคำนวณทางคณิตศาสตร์ การลบ หรือการรวมรายการที่ซ้ำกัน