การทดสอบ 1 หน่วยด้วยข้อมูลโดยย่อ

Glance Unit Test API ช่วยให้คุณทดสอบโค้ด Glance ได้โดยไม่ต้องขยายมุมมองหรือใช้ UI Automator ตัวอย่างเช่น Unit Test API ช่วยให้คุณตรวจสอบเงื่อนไขต่างๆ เช่น องค์ประกอบอยู่ในรายการหรือไม่ หรือมีการเลือกช่องหรือไม่ โดยใช้ Matcher เช่น hasContentDescriptionEqualTo หรือ isChecked

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

ตั้งค่า

การพึ่งพาที่จำเป็นในการใช้ไลบรารี Unit Test จะแสดงอยู่ในตัวอย่างต่อไปนี้

// Other Glance and Compose runtime dependencies.
...
testImplementation 'androidx.glance:glance-testing:1.1.1'
testImplementation 'androidx.glance:glance-appwidget-testing:1.1.1'
...
// You may include additional dependencies, such as Robolectric, if your test
// needs to set a LocalContext.

โครงสร้างการทดสอบ

จัดระเบียบฟังก์ชันที่ประกอบกันได้ นอกคลาส GlanceAppWidget เพื่อให้สามารถนำโค้ดกลับมาใช้ซ้ำและทำการทำ Unit Test ได้ ลดความซับซ้อนของหน่วยที่อยู่ระหว่างการทดสอบให้มากที่สุด

คุณสามารถกำหนดเป้าหมาย Composable ที่จะทดสอบด้วย provideComposable และเรียกใช้การทดสอบหน่วยในโหนด Glance อย่างน้อย 1 รายการด้วย onNode หรือ onAllNodes ตามลำดับ

private const val FAKE_HEADLINE = "EXTRA! EXTRA! READ ALL ABOUT IT!"

class MyGlanceComposableTest {
    @Test
    fun myNewsItemComposable_largeSize_hasHeadline() = runGlanceAppWidgetUnitTest {
        // Set the composable to test
        provideComposable {
            MyNewsItemComposable(FAKE_HEADLINE)
        }

        // Perform assertions
        onNode(hasTestTag("headline"))
            .assertHasText(FAKE_HEADLINE)
    }


    @Composable
    fun MyNewsItemComposable(headline: String) {
        Row {
            Text(
                text = headline,
                modifier = GlanceModifier.semantics { testTag = "headline" },
            )
        }
    }
}

ตั้งค่าบริบทและขนาดสำหรับการทดสอบ

หากฟังก์ชันที่ประกอบกันได้อ่านบริบทโดยใช้วิธี LocalContext.current() คุณต้องตั้งค่าบริบทโดยใช้ setContext() ไม่เช่นนั้น คุณจะทำขั้นตอนนี้หรือไม่ก็ได้

คุณสามารถใช้เฟรมเวิร์กการทำ Unit Test Android ที่อิงตาม JVM เช่น Roboletric เพื่อระบุบริบท

หากฟังก์ชันที่ประกอบกันได้เข้าถึง LocalSize ให้ตั้งค่าขนาดที่ต้องการสำหรับการทดสอบก่อนที่จะระบุฟังก์ชันที่ประกอบกันได้ในการทดสอบ ขนาดเริ่มต้นคือ 349.dp x 455.dp ซึ่งเทียบเท่ากับวิดเจ็ต 5x4 ที่แสดงบนอุปกรณ์ Pixel 4 ในโหมดแนวตั้ง

  • หาก AppWidget ใช้ sizeMode == Single คุณสามารถตั้งค่านี้เป็น minWidth และ minHeight ในไฟล์ info.xml ของวิดเจ็ต
  • หาก AppWidget ใช้ sizeMode == Exact คุณสามารถระบุขนาดที่จะ ทดสอบได้ในลักษณะเดียวกับวิธีที่คุณ กำหนดขนาดสำหรับวิดเจ็ต และ ระบุขนาดแนวนอนและแนวตั้งที่วิดเจ็ตอาจปรากฏขึ้นและทดสอบ ขนาดเหล่านั้น
  • หาก AppWidget ใช้ sizeMode == Responsive คุณสามารถตั้งค่านี้เป็นขนาดใดขนาดหนึ่งจากรายการที่คุณระบุเมื่อระบุ sizeMode

ระยะเวลาเริ่มต้นสำหรับการหมดเวลาในการทดสอบคือ 1 วินาที แต่คุณสามารถส่งระยะเวลาที่กำหนดเองเป็นอาร์กิวเมนต์ไปยังเมธอด runGlanceAppWidgetUnitTest ได้หากโครงสร้างพื้นฐานการทดสอบกำหนดการหมดเวลาที่แตกต่างกัน

ดูข้อมูลเพิ่มเติมและตัวอย่างโค้ดได้ที่เอกสารอ้างอิงสำหรับ runGlanceAppWidgetUnitTest