Bir Bakışta ile birim testi

Glance birim testi API'si, görünümleri artırmadan veya UI Automator'a ihtiyaç duymadan Glance kodunuzu test etmenize olanak tanır. Örneğin, birim testi API'si, hasContentDescriptionEqualTo veya isChecked gibi eşleştiricileri kullanarak öğelerin listede olup olmadığını ya da kutuların işaretlenip işaretlenmediğini doğrulamanıza olanak tanır.

Bu API, hafiftir ve daha az kurulum gerektirir. Bu nedenle, widget'ınızın bağımsız parçalarını geliştirirken ve kodun yeniden kullanımını iyileştirmek için bunları düzenlerken test odaklı geliştirme yapabilirsiniz.

Kurulum

Birim testi kitaplığını kullanmak için gereken bağımlılıklar aşağıdaki örneklerde gösterilmiştir:

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

Test yapısı

Kodun yeniden kullanılmasını ve birim testini etkinleştirmek için birleştirilebilir işlevleri GlanceAppWidget sınıfının dışında düzenleyin. Test edilen birimlerinizin karmaşıklığını mümkün olduğunca azaltın.

class MyGlanceComposableTest {
    @Test
    fun myNewsItemComposable_largeSize_hasAuthorAsSubtitle() = runGlanceAppWidgetUnitTest {
        // Prepare inputs and state
        setAppWidgetSize(100.dp, 100.dp)

        // Set the composable under test
        provideComposable {
            MyNewsItemComposable(TEST_NEWS_ITEM)
        }

        // Perform assertions
        onNode(hasTestTag("subTitle"))
            .assertHasText(TEST_NEWS_ITEM.authorName)
    }
}

Test için bağlam ve boyut ayarlama

Composable işleviniz LocalContext.current() yöntemini kullanarak bağlamı okuyorsa setContext() kullanarak bir bağlam ayarlamanız gerekir. Aksi takdirde bu adım isteğe bağlıdır.

Bağlam sağlamak için Roboletric gibi JVM tabanlı herhangi bir Android birim testi çerçevesini kullanabilirsiniz.

Composable işleviniz LocalSize öğesine erişiyorsa testte composable sağlamadan önce test için amaçlanan boyutu ayarlayın. Varsayılan boyut 349 dp x 455 dp'dir. Bu boyut, Pixel 4 cihazda dikey modda gösterilen 5x4 boyutlu bir widget'a eşdeğerdir.

  • AppWidget'ınız sizeMode == Single kullanıyorsa bunu widget'ınızın info.xml dosyasında minWidth ve minHeight olarak ayarlayabilirsiniz.
  • AppWidget'ınız sizeMode == Exact kullanıyorsa widget'ınız için boyut belirlemeye benzer şekilde test edilecek boyutları belirleyebilir ve widget'ınızın görünebileceği yatay ve dikey boyutları belirleyip bu boyutlar için test yapabilirsiniz.
  • AppWidget'ınız sizeMode == Responsive kullanıyorsa bunu, sizeMode belirtirken sağladığınız listedeki boyutlardan birine ayarlayabilirsiniz.

Test zaman aşımı için varsayılan süre 1 saniyedir ancak test altyapınız farklı bir zaman aşımı uyguluyorsa runGlanceAppWidgetUnitTest yöntemine bağımsız bir süre iletebilirsiniz.

Daha fazla bilgi ve kod örnekleri için runGlanceAppWidgetUnitTest ile ilgili referans belgelerine bakın.