Testes de unidade com o Glance

A API de teste de unidade do Glance permite testar o código do Resumo sem aumentar as visualizações ou precisar de um automatizador de interface. Por exemplo, a API de teste de unidade permite verificar as condições, como se os elementos estão em uma lista ou se as caixas foram marcadas, usando matchers como hasContentDescriptionEqualTo ou isChecked.

Essa API é leve e requer menos configuração. Assim, é possível realizar o desenvolvimento orientado por testes conforme desenvolve partes individuais do widget e as organiza para melhorar a reutilização do código.

Configurar

As dependências necessárias para usar a biblioteca de teste de unidade são mostradas nos exemplos abaixo:

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

Estrutura do teste

Organize funções combináveis fora da classe GlanceAppWidget para ativar a reutilização de código e o teste de unidade. Reduza a complexidade das unidades em teste o máximo possível.

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)
    }
}

Definir o contexto e o tamanho do teste

Se a função combinável ler o contexto usando o método LocalContext.current(), defina um contexto usando o método LocalContext.current(). Caso contrário, esta etapa é opcional.

Você pode usar qualquer framework de teste de unidade do Android baseado em JVM, como o Roboletric, para fornecer o contexto.

Se a função combinável acessar LocalSize, defina o tamanho pretendido para o teste antes de fornecer um elemento combinável no teste. O tamanho padrão é 349 dp x 455 dp, o que equivale a um widget 5 x 4 mostrado em um dispositivo Pixel 4 no modo retrato.

  • Se o AppWidget usa sizeMode == Single, você pode definir isso como minWidth e minHeight no arquivo info.xml do widget.
  • Se o AppWidget usa sizeMode == Exact, você pode identificar os tamanhos a testar de forma semelhante a como determinar um tamanho para o widget e identificar tamanhos de paisagem e retrato em que o widget pode aparecer e testar para eles.
  • Se o AppWidget usa sizeMode == Responsive, defina-o como um dos tamanhos da lista fornecida ao especificar o sizeMode.

A duração padrão de um tempo limite de teste é de 1 segundo, mas é possível transmitir uma duração personalizada como argumento para o método runGlanceAppWidgetUnitTest se a infraestrutura de teste aplicar um tempo limite diferente.

Para mais informações e exemplos de código, consulte a documentação de referência para runGlanceAppWidgetUnitTest.