Scrivere test jetpack Compose per dispositivi piegabili
Jetpack Compose offre un'API di test che può essere usata per testare i layout, come espresso viene usato con il sistema di visualizzazione tradizionale. Jetpack Window Manager offre anche una libreria di test che semplifica la simulazione FoldingFeature
degli oggetti. Con queste risorse, è possibile scrivere test dell'interfaccia utente instrumentati nei progetti Compose per dispositivi piegabili e a doppio schermo.
Libreria ComposeTesting
Per ridurre la quantità di codice necessaria per scrivere test piegabili, è anche possibile usare la libreria ComposeTesting, che fa parte del kit di test. Questa libreria contiene metodi di utilità per simulare FoldingFeature
oggetti e altre funzionalità utili per i test dell'interfaccia utente di Compose, inclusi i metodi helper di scorrimento rapido e stringhe.
Per usare la libreria ComposeTesting nei test, assicurarsi di fare clic sulla scheda Con la libreria ComposeTesting per i frammenti di codice in questo articolo.
Eseguire la configurazione
Creare un nuovo file di classe di test nella directory androidTest . Qui si aggiungeranno in seguito i frammenti di codice per le regole e i test di test.
Assicurarsi di avere il
mavenCentral()
repository nel file build.gradle di primo livello:allprojects { repositories { google() mavenCentral() } }
Aggiungere le dipendenze seguenti al file build.gradle a livello di modulo (la versione corrente può essere diversa da quella illustrata di seguito):
androidTestImplementation "androidx.compose.ui:ui-test-junit4:1.3.0" androidTestImplementation "androidx.window:window-testing:1.0.0" // Only necessary if Jetpack Window Manager isn't imported for implementation androidTestImplementation "androidx.window:window:1.0.0"
Assicurarsi che sia impostato sull'API
compileSdkVersion
33 e che sia impostato sull'APItargetSdkVersion
32 o versione successiva nel file build.gradle a livello di modulo:android { compileSdkVersion 33 defaultConfig { targetSdkVersion 32 } ... }
Creare un oggetto
TestRule
in grado di eseguire controlli compose e simulare le funzionalità di riduzione. A tale scopo, è possibile concatenare due regole: unaWindowLayoutInfo
regola di pubblicazione e una regola di test di Android Compose.private val composeTestRule = createAndroidComposeRule<MainActivity>() private val publisherRule = WindowLayoutInfoPublisherRule() @get:Rule val testRule: TestRule init { testRule = RuleChain.outerRule(publisherRule).around(composeTestRule) }
Come scrivere test
Per scrivere un test compose per dispositivi piegabili e a doppio schermo, seguire questi quattro passaggi:
- Impostare il contenuto del test
- Simulare un
FoldingFeature
- Trovare i nodi da testare
- Eseguire asserzioni o azioni nei nodi
I frammenti di codice seguenti mostrano un test di esempio che verifica se gli elementi di testo "riquadro 1" e "riquadro 2" vengono visualizzati nel TwoPaneSample
componibile quando è presente un verticale FoldingFeature
.
@Test
fun sample_verticalFoldingFeature_showsTwoPanes() {
// 1. Optional: set the content of the test (default is MainActivity content)
composeTestRule.activity.setContent {
TwoPaneSample()
}
// 2. Simulate a vertical FoldingFeature
composeTestRule.activityRule.scenario.onActivity { activity ->
val verticalFoldingFeature = FoldingFeature(
activity = activity,
orientation = FoldingFeature.Orientation.VERTICAL
)
val windowLayoutInfo = TestWindowLayoutInfo(listOf(verticalFoldingFeature))
publisherRule.overrideWindowLayoutInfo(windowLayoutInfo)
}
// 3. Find the nodes to test and 4. Perform assertions on the nodes
composeTestRule.onNodeWithText("pane 1").assertIsDisplayed()
composeTestRule.onNodeWithText("pane 2").assertIsDisplayed()
}
Quando si scrivono test personalizzati, è possibile personalizzare ogni passaggio in base alle proprie esigenze. Qualsiasi componibile può passare all'espressione setContent
lambda ed è possibile modificare la posizione, le dimensioni, l'orientamento e lo stato di FoldingFeature.
Risorse
Per altre informazioni sui test con Jetpack Compose e Jetpack Window Manager, fare riferimento a queste risorse: