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

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

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

ตั้งค่า

ทรัพยากร Dependency ที่จำเป็นต่อการใช้ไลบรารี 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 โหนดเดียวหรือหลายโหนดด้วย 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 เช่น Robolectric เพื่อระบุบริบทได้

หากฟังก์ชันที่ประกอบกันได้เข้าถึง 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