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:
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!
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
Esquerda: Design da sandbox de AR/RV da I/O 2018. Direita: Arte principal das plataformas do Light Board A arte foi criada em Maya e Cinema 4D. Criamos materiais baseados em física para os modelos usando o Substance Painter. Assim como a iteração contínua é fundamental para a engenharia, ela também é importante para criar ativos de arte. Sabendo disso, controlamos com muita atenção nosso pipeline de conteúdo, mesmo em um projeto relativamente simples como esse. Isso nos permitiu experimentar diversos visuais e estilos de plataforma com muita rapidez antes de chegarmos ao design final. Na área de engenharia, selecionamos o Unity como ambiente de desenvolvimento. O Unity nos deu algumas vantagens importantes. Primeiro, é fácil criar gráficos 3D muito bacanas e colocá-los para funcionar na hora. Segundo, o componente do mecanismo já está completo, então pudemos começar a iterar imediatamente no código de jogabilidade. Quanto à arte, ele nos permitiu testar opções de jogabilidade antes de tomarmos uma decisão final. Além disso, o Unity nos deu suporte a Android e iOS sem quase termos tido trabalho. Para tratar do aspecto multijogador, usamos o Firebase Realtime Database. Estávamos preocupados com o desempenho da rede no evento e, por isso, sentimos que a natureza permanente de um banco de dados seria mais tolerante a redes ruins. E, no fim das contas, deu tudo certo e conseguimos dar ao pessoal a chance de sair e voltar a jogos de graça! Desenvolver o Light Board foi muito divertido para nós. Esperamos que as pessoas possam usá-lo como exemplo da facilidade que se tem não só para criar aplicativos de realidade aumentada, mas de se usar recursos impressionantes, como os Cloud Anchors. Não deixe de dar uma olhada no nosso repositório de código aberto para testar o Light Board!
Os apps com conteúdo imersivo podem exibir esse conteúdo em tela cheia nos dispositivos com recorte de tela. Se o seu aplicativo usa notificações de mensagem, aproveite as mudanças de MessagingStyle para deixar as notificações ainda mais úteis e práticas. Agora você pode exibir conversas, anexar fotos e adesivos e até sugerir respostas inteligentes. Num futuro próximo, você vai poder usar o ML Kit para gerar sugestões de resposta inteligente para o seu aplicativo.
Notificações MessagingStyle com conversas e respostas inteligentes (à esquerda), imagens e adesivos (à direita).