O Jetpack Compose UI 1.11 mudou a forma como os seus testes com compose funcionam

Uma mudança importante introduzida no Jetpack Compose UI 1.11 pode facilmente passar despercebida durante upgrades, mas ela possui impacto direto na forma como os testes de UI se comportam e são executados.

As APIs tradicionais de testes agora estão deprecated em favor das novas APIs v2:

createComposeRule()
createAndroidComposeRule()

Agora, os desenvolvedores são incentivados a migrar para:

androidx.compose.ui.test.junit4.v2.createComposeRule()
androidx.compose.ui.test.junit4.v2.createAndroidComposeRule()

O Que Realmente Mudou?

Essa migração não representa apenas uma mudança de pacote.

O dispatcher interno de coroutines utilizado pelos testes do Compose UI também foi alterado.

APIs anteriores: UnconfinedTestDispatcher

Novas APIs v2: StandardTestDispatcher

Isso altera significativamente a forma como a execução de coroutines acontece durante os testes.

Por Que Isso Importa

Anteriormente, os testes executavam coroutines imediatamente utilizando UnconfinedTestDispatcher.

Apesar de conveniente, esse comportamento não representava corretamente a execução real da aplicação e podia esconder problemas de sincronização ou timing.

O novo StandardTestDispatcher passa a enfileirar a execução das coroutines, fazendo com que os testes do Compose UI se comportem de maneira muito mais próxima de ambientes reais.

Testes que antes passavam podem agora:

  • Falhar de forma intermitente
  • Exigir sincronização explícita
  • Precisar de chamadas para waitForIdle()
  • Expor race conditions ocultas

Exemplo de Migração

Antes:

import androidx.compose.ui.test.junit4.createComposeRule

Depois:

import androidx.compose.ui.test.junit4.v2.createComposeRule

Alguns testes agora podem exigir sincronização explícita:

composeTestRule.waitForIdle()

composeTestRule.runOnIdle {
    // assertions
}

Linha do Tempo da Mudança

A mudança foi introduzida durante o ciclo de desenvolvimento do Compose UI 1.11 e tornou-se estável oficialmente no Compose UI 1.11.

Segundo as release notes:

“As APIs v2 utilizam StandardTestDispatcher por padrão para simular melhor o comportamento de produção, onde coroutines são enfileiradas em vez de executadas imediatamente.”

Referências Oficiais

Considerações Finais

Essa é uma daquelas mudanças de framework que parecem pequenas no changelog, mas podem gerar grande impacto na confiabilidade e no comportamento dos testes.

Embora a migração possa exigir ajustes em testes existentes, o novo comportamento melhora o determinismo e representa de forma mais fiel a execução real da aplicação.

Postar um comentário

0 Comentários