หากคุณใช้ผู้ให้บริการเนื้อหาเพื่อจัดเก็บและเรียกข้อมูล หรือ ทำให้แอปอื่นๆ เข้าถึงข้อมูลได้ คุณควรทดสอบผู้ให้บริการเพื่อให้แน่ใจว่า จะมีลักษณะการทำงานที่ไม่คาดคิด บทเรียนนี้จะอธิบายวิธีการทดสอบแบบสาธารณะ ผู้ให้บริการเนื้อหา และยังใช้ได้กับผู้ให้บริการที่คุณเก็บไว้เป็นส่วนตัวด้วย แอปของคุณเองได้
สร้างการทดสอบการผสานรวมสำหรับผู้ให้บริการเนื้อหา
ผู้ให้บริการเนื้อหาช่วยให้คุณสามารถเข้าถึงข้อมูลผู้ใช้จริงได้ คุณจึงต้องตรวจสอบ ที่คุณทดสอบผู้ให้บริการเนื้อหาในสภาพแวดล้อมการทดสอบแยกต่างหาก ช่วงเวลานี้ ทำให้คุณสามารถเรียกใช้เฉพาะกับทรัพยากร Dependency ที่กำหนดไว้อย่างชัดเจนใน กรอบการทดสอบ และยังหมายความว่าการทดสอบของคุณไม่ได้แก้ไขข้อมูลผู้ใช้จริงด้วย สำหรับ เช่น คุณควรหลีกเลี่ยงการเขียนแบบทดสอบที่ไม่สำเร็จเพราะมีข้อมูลเหลืออยู่ จากการทดสอบครั้งก่อนหน้า ในทำนองเดียวกัน การทดสอบของคุณควรหลีกเลี่ยงการเพิ่มหรือลบ ข้อมูลติดต่อจริงจากผู้ให้บริการ
หากต้องการทดสอบผู้ให้บริการเนื้อหาแยกต่างหาก ให้ใช้ ProviderTestCase2
คลาสนี้จะให้คุณใช้คลาสออบเจ็กต์จำลองของ Android ได้ เช่น
IsolatedContext
และ MockContentResolver
เพื่อเข้าถึงไฟล์และ
ข้อมูลฐานข้อมูลได้โดยไม่ส่งผลกระทบต่อข้อมูลผู้ใช้จริง
คุณควรเขียนแบบทดสอบการผสานรวมเป็นคลาสการทดสอบ JUnit 4 เพื่อดูข้อมูลเพิ่มเติม เกี่ยวกับการสร้างคลาสทดสอบ JUnit 4 และการใช้การยืนยัน JUnit 4 โปรดดูสร้าง ชั้นเรียนทดสอบหน่วยในเครื่อง (Local Unit Test Class)
ในการสร้างการทดสอบการผสานรวมสำหรับผู้ให้บริการเนื้อหาของคุณ คุณต้องดำเนินการต่อไปนี้ ขั้นตอน:
- สร้างคลาสการทดสอบเป็นคลาสย่อยของ
ProviderTestCase2
- ระบุคลาส
AndroidJUnitRunner
ที่ AndroidX Test มีให้ เป็นตัวดำเนินการทดสอบเริ่มต้นของคุณ - ตั้งค่าออบเจ็กต์
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()
การทดสอบของคุณควรยืนยันว่าวิธีทั้งหมดนี้ใช้ได้ผล - ทดสอบตรรกะทางธุรกิจ: หากผู้ให้บริการเนื้อหาใช้ตรรกะทางธุรกิจ คุณ ควรทดสอบ ตรรกะทางธุรกิจรวมถึงการจัดการมูลค่าที่ไม่ถูกต้อง ทางการเงิน หรือ การคำนวณทางคณิตศาสตร์ การลบ หรือการรวมรายการที่ซ้ำกัน