Testes de unidade com o Glance

Com a API de teste de unidade do Glance, você pode testar o código do Glance sem aumentar as visualizações ou precisar de um Automator de interface. Por exemplo, a API de teste de unidade permite verificar condições, por exemplo, se os elementos estão em uma lista ou se caixas foram está marcada, usando correspondentes como hasContentDescriptionEqualTo ou isChecked.

Essa API é leve e requer menos configuração para que você possa executar à medida que desenvolve partes individuais do widget e as organiza para e melhorar a reutilização de código.

Configurar

As dependências necessárias para usar a biblioteca de testes de unidade são mostradas no exemplos a seguir:

// 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 reutilização de código e teste de unidade. Reduza a complexidade das unidades em teste conforme 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 LocalContext.current() método, defina um contexto usando o método LocalContext.current(). Caso contrário, esta etapa é opcional.

Use qualquer framework de teste de unidade do Android baseado em JVM, como o Roboletric, para 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 nele. O tamanho padrão é 349 dp x 455 dp, que é equivalente ao widget de 5 x 4 mostrado em um dispositivo Pixel 4 no modo retrato.

  • Se o AppWidget usa sizeMode == Single, defina-o como o minWidth e minHeight no arquivo info.xml do widget.
  • Se o AppWidget usa sizeMode == Exact, é possível identificar os tamanhos para teste de maneira semelhante a como você determina um tamanho para seu widget e identificar os tamanhos dos modos paisagem e retrato em que o widget pode aparecer e testar para eles.
  • Se o AppWidget usa sizeMode == Responsive, defina-o como uma das seguintes opções: os tamanhos da lista fornecida ao especificar o sizeMode.

A duração padrão do tempo limite de um teste é de 1 segundo, mas é possível transmitir um valor de duração como argumento para o método runGlanceAppWidgetUnitTest se o do Google Cloud aplica um tempo limite diferente.

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