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.
0 Comentários