No Google I/O deste ano, lançamos o AndroidX Test, que é parte do Jetpack. Hoje, estamos felizes em anunciar o lançamento da versão v1.0.0 Final com a versão 4.0 do Robolectric. Como parte da versão 1.0.0, todo o AndroidX Test agora é de código aberto.

O AndroidX Test fornece APIs de teste comuns em todos os ambientes de teste, incluindo testes do Robolectric e de instrumentação. Ele inclui o suporte existente do Android JUnit 4, a biblioteca de interação da visualização do Espresso e várias novas e importantes APIs de teste. Essas APIs estão disponíveis para testes de instrumentação em dispositivos reais e virtuais. A partir do Robolectric 4.0, elas também estão disponíveis para testes locais da JVM.

Considere o seguinte caso de uso em que iniciamos a tela de login, inserimos um nome de usuário e uma senha válidos e somos direcionados para a tela inicial.

@RunWith(AndroidJUnit4::class)
class LoginActivityTest {
  @Test fun successfulLogin() {
// GIVEN
val scenario =
ActivityScenario.launch(LoginActivity::class.java)
    // WHEN
onView(withId(R.id.user_name)).perform(typeText(“test_user”))
onView(withId(R.id.password))
.perform(typeText(“correct_password”))
onView(withId(R.id.button)).perform(click())
    // THEN
assertThat(getIntents().first())
.hasComponentClass(HomeActivity::class.java)
}
}

Vamos analisar o teste:

  1. Usamos a nova API ActivityScenario para iniciar o LoginActivity. Isso cria a atividade e a transfere para o estado retomado, onde fica visível para o usuário e pronto para entrada. O ActivityScenario cuida de toda a sincronização com o sistema e fornece suporte para cenários comuns que devem ser testados, como a forma que seu aplicativo lida com a destruição e a recriação feitas pelo sistema.
  2. Usamos a biblioteca de interação da visualização do Espresso para inserir texto em dois campos e clicar em um botão na IU. Assim como o ActivityScenario, o Espresso lida com a sincronização e vários encadeamentos para você, além de fornecer uma API fluente e legível para testes.
  3. Usamos a nova API do Espresso, a Intents.getIntents(), que retorna uma lista de intents capturados. Em seguida, verificamos os intents capturados usando IntentSubject.assertThat(), que é uma das novas extensões do Android Truth. A extensão do Android Truth oferece uma API expressiva e legível para validar os estados dos objetos fundamentais da estrutura do Android.

Esse teste pode ser executado em uma JVM local usando o Robolectric ou em qualquer dispositivo físico ou virtual.

Para executá-lo em um dispositivo Android, direcione o teste para a raiz de origem "androidTest" com as seguintes dependências:

androidTestImplementation(“androidx.test:runner:1.1.0”)
androidTestImplementation(“androidx.test.ext:junit:1.0.0”)
androidTestImplementation(“androidx.test.espresso:espresso-intents:3.1.0”)
androidTestImplementation(“androidx.test.espresso:espresso-core:3.1.0”)
androidTestImplementation(“androidx.test.ext:truth:1.0.0”)

A execução em um dispositivo físico ou virtual garante que seu código interaja com o sistema Android corretamente. No entanto, à medida que o número de casos de teste aumenta, você começa a sacrificar o tempo de execução do teste. É possível fazer apenas alguns testes maiores em um dispositivo real e, ao mesmo tempo, executar um grande número de testes unitários menores em um simulador, como o Robolectric, que pode executar testes mais rapidamente em uma JVM local.

Para executar os testes em uma JVM local usando o simulador do Robolectric, direcione o teste para a raiz de origem "teste" adicionando as seguintes linhas ao seu gradle.build:

testImplementation(“androidx.test:runner:1.1.0”)
testImplementation(“androidx.test.ext:junit:1.0.0”)
testImplementation(“androidx.test.espresso:espresso-intents:3.1.0”)
testImplementation(“androidx.test.espresso:espresso-core:3.1.0”)
testImplementation(“androidx.test.ext:truth:1.0.0”)
testImplementation (“org.robolectric:robolectric:4.0”)
android {
testOptions.unitTests.includeAndroidResources = true
}

A unificação do teste de APIs entre simuladores e instrumentação traz muitas possibilidades interessantes. O Project Nitrogen, também anunciado no Google I/O, permitirá deslocar testes entre os ambientes de tempo de execução com facilidade. Isso significa que você poderá realizar testes escritos com base nas novas APIs do AndroidX Test e executá-los em uma JVM local, em um dispositivo real ou virtual, ou até mesmo em uma plataforma de testes baseada na nuvem como o Firebase Test Lab. Estamos muito animados com as oportunidades que isso proporcionará aos desenvolvedores, que poderão receber feedback rápido, preciso e acionável sobre a qualidade dos aplicativos.

Por fim, estamos felizes em anunciar que todos os componentes do AndroidX têm o código totalmente aberto. Estamos ansiosos para receber suas contribuições!

Leia mais

Documentação: https://developer.android.com/testing

Notas da versão:

Robolectric: https://github.com/robolectric/robolectric

AndroidX Test: https://github.com/android/android-test