กำหนดการจัดการอุปกรณ์เสมือนจริงโดยอัตโนมัติด้วยกฎการทดสอบที่คาดการณ์ไว้

projectedtestrule, การจัดการอุปกรณ์เสมือนจริง

อุปกรณ์ XR ที่รองรับ
คำแนะนำนี้จะช่วยคุณสร้างประสบการณ์การใช้งานสำหรับอุปกรณ์ XR ประเภทนี้
แว่นตาเสียงและ
การแสดงผล

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