การทดสอบอัตโนมัติทำได้ยากเมื่อโค้ดขึ้นอยู่กับฮาร์ดแวร์จริง เช่น คุณอาจต้องเชื่อมต่อและยกเลิกการเชื่อมต่ออุปกรณ์จริงด้วยตนเอง เพื่อยืนยันสถานะการเชื่อมต่อ ด้วยประเภทต่างๆ ความสามารถ และสถานะอุปกรณ์ของแว่นตาเสียงและแว่นตาแสดงผล ความท้าทายนี้อาจซับซ้อนยิ่งขึ้น หากต้องการทดสอบชุดกรณีที่หลากหลายนี้ ให้ใช้ Projected Test Rule API เพื่อตั้งค่าและจัดการสภาพแวดล้อมการทดสอบที่คาดการณ์ไว้โดยอัตโนมัติ ไลบรารีจะจัดการการสร้างอุปกรณ์ที่ฉายภาพ สถานะการเชื่อมต่อ และการยืนยันความสามารถ เพื่อให้คุณมุ่งเน้นไปที่การทดสอบตรรกะหลักของแอปได้ ใช้ API เหล่านี้เพื่อสร้างชุดโปรแกรมทดสอบที่มีประสิทธิภาพโดยไม่ต้องเขียนโค้ด Boilerplate
เพิ่มการขึ้นต่อกันของไลบรารี
หากต้องการใช้กฎการทดสอบ ให้เพิ่มอาร์ติแฟกต์การทดสอบลงใน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 set ซึ่งจะเป็นประโยชน์ในการ
ยืนยันว่าแอปของคุณตรวจสอบการรองรับฮาร์ดแวร์อย่างถูกต้องก่อนที่จะพยายาม
ฉายเนื้อหาไปยังแว่นตา
@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