Condividi tramite


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

  1. 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.

  2. Assicurarsi di avere il mavenCentral() repository nel file build.gradle di primo livello:

    allprojects {
        repositories {
            google()
            mavenCentral()
         }
    }
    
  3. 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"
    
  4. Assicurarsi che sia impostato sull'API compileSdkVersion 33 e che sia impostato sull'API targetSdkVersion 32 o versione successiva nel file build.gradle a livello di modulo:

    android { 
        compileSdkVersion 33
    
        defaultConfig { 
            targetSdkVersion 32
        } 
        ... 
    }
    
  5. Creare un oggetto TestRule in grado di eseguire controlli compose e simulare le funzionalità di riduzione. A tale scopo, è possibile concatenare due regole: una WindowLayoutInfo 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:

  1. Impostare il contenuto del test
  2. Simulare un FoldingFeature
  3. Trovare i nodi da testare
  4. 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: