การทดสอบอัตโนมัติทำได้ยากเมื่อโค้ดขึ้นอยู่กับฮาร์ดแวร์จริง เช่น คุณอาจต้องเชื่อมต่อและยกเลิกการเชื่อมต่ออุปกรณ์จริงด้วยตนเองเพื่อยืนยันสถานะการเชื่อมต่อ ความท้าทายนี้อาจซับซ้อนยิ่งขึ้นไปอีกเมื่อพิจารณาถึงประเภทที่แตกต่างกัน ความสามารถ และสถานะอุปกรณ์ที่แตกต่างกันของแว่นตาอัจฉริยะสำหรับเสียงและแว่นตาอัจฉริยะสำหรับแสดงผล หากต้องการทดสอบกรณีต่างๆ เหล่านี้ ให้ใช้ Projected Test Rule API เพื่อตั้งค่าและ จัดการสภาพแวดล้อมการทดสอบแบบจำลองโดยอัตโนมัติ ไลบรารีจะจัดการการสร้างอุปกรณ์แบบจำลอง สถานะการเชื่อมต่อ และการยืนยันความสามารถ คุณจึงมุ่งเน้นไปที่การทดสอบตรรกะหลักของแอปได้ ใช้ API เหล่านี้เพื่อสร้างชุดการทดสอบที่แข็งแกร่งโดยไม่ต้องเขียนโค้ดซ้ำๆ
เพิ่มการขึ้นต่อกันของไลบรารี
หากต้องการใช้กฎการทดสอบ ให้เพิ่มอาร์ติแฟกต์การทดสอบลงในไฟล์ build.gradle ของแอป
ดึงดูด
dependencies {
// JXR Projected testing library
testImplementation "androidx.xr.projected:projected-testing:1.0.0-alpha07"
}
Kotlin
dependencies {
// JXR Projected testing library
testImplementation("androidx.xr.projected:projected-testing:1.0.0-alpha07")
}
ตั้งค่ากฎการทดสอบ
หากต้องการตั้งค่ากฎการทดสอบพื้นฐาน ให้ใส่คำอธิบายประกอบกฎในคลาสการทดสอบ โดยค่าเริ่มต้น กฎจะเชื่อมต่ออุปกรณ์แบบจำลองและเปิดใช้ความสามารถด้านภาพก่อนที่จะเรียกใช้การทดสอบแต่ละครั้ง
@get:Rule val projectedTestRule = ProjectedTestRule() private val context: Context get() = ApplicationProvider.getApplicationContext() @Test fun testWithConnectedDevice() { val projectedContext = ProjectedContext.createProjectedDeviceContext(context) assertThat(ProjectedContext.isProjectedDeviceContext(projectedContext)).isTrue() }
ทดสอบสถานการณ์ที่พบบ่อยอื่นๆ
เมื่อตั้งค่าสภาพแวดล้อมการทดสอบแบบจำลองด้วยกฎการทดสอบพื้นฐานแล้ว ให้ทดสอบสถานการณ์ที่พบบ่อยอื่นๆ สำหรับแว่นตาที่มีระบบเสียงและแว่นตาที่มีจอแสดงผลเพื่อยืนยันฟังก์ชันการทำงานของแอป
ทดสอบการยกเลิกการเชื่อมต่ออุปกรณ์ทดสอบ
หากต้องการทดสอบว่าแอปตอบสนองอย่างไรเมื่อการเชื่อมต่อกับแว่นตาขาดหายไป ให้ใช้พร็อพเพอร์ตี้ isDeviceConnected ดังนี้
@Test fun testDeviceDisconnection() { // manually disconnect the device via the rule projectedTestRule.isDeviceConnected = false assertThrows(IllegalStateException::class.java) { ProjectedContext.createProjectedDeviceContext(context) } }
ประเด็นสำคัญเกี่ยวกับโค้ด
- กฎจะรีเซ็ตพร็อพเพอร์ตี้ เช่น
isDeviceConnectedเป็นค่าเริ่มต้นก่อนการทดสอบทุกครั้ง คุณไม่จำเป็นต้องรีเซ็ตพร็อพเพอร์ตี้เหล่านี้ด้วยตนเองในเมธอด@After
ทดสอบความสามารถต่างๆ ของอุปกรณ์
แว่นตาที่มีจอแสดงผลสามารถแสดง UI ที่สร้างด้วย Jetpack Compose Glimmer ได้ โดยค่าเริ่มต้น
ProjectedTestRule จะเปิดใช้ CAPABILITY_VISUAL_UI หากต้องการกำหนดสิ่งที่อุปกรณ์แบบจำลองรองรับอย่างชัดเจน ให้ใช้ชุด capabilities ซึ่งจะเป็นประโยชน์ในการยืนยันว่าแอปตรวจสอบการรองรับฮาร์ดแวร์อย่างถูกต้องก่อนที่จะพยายามแสดงเนื้อหาบนแว่นตา
@Test fun testAppBehaviorWithoutDisplayCapabilities() = projectedTestRule.launchTestProjectedDeviceActivity { activity -> // disable display capability projectedTestRule.capabilities = setOf() runBlocking { // create the controller val controller = ProjectedDeviceController.create(activity) // verify the app recognizes the lack of visual UI support assertThat(controller.capabilities).doesNotContain(ProjectedDeviceController.Capability.CAPABILITY_VISUAL_UI) } }
ประเด็นสำคัญเกี่ยวกับโค้ด
- กฎจะรีเซ็ตพร็อพเพอร์ตี้ เช่น
capabilitiesเป็นค่าเริ่มต้นก่อนการทดสอบทุกครั้ง คุณไม่จำเป็นต้องรีเซ็ตพร็อพเพอร์ตี้เหล่านี้ด้วยตนเองในเมธอด@After - เมื่อต้องการยืนยันลักษณะการทำงานของกิจกรรมที่แสดงบนแว่นตาที่มีจอแสดงผลสำหรับแสดงผลโดยเฉพาะ ให้ใช้
launchTestProjectedDeviceActivity