Download - Automatize seus testes de UI com a Espresso!
about.me/ramonrabelloRamon Rabello
Automatize seus testes de UI com a Espresso!
~ 10 anosSenior Developer
about.me/ramonrabelloRamon Rabello
Paixão por Comunidades!Agilista
OrganizerGDG Brasília
BB Tecnologia e ServiçosLíder de Inovação
CEO, VisyoEmpreendedor
AndroidInstrutor / Consultor
Por que eu devo testar?
Garantir que determinada feature do sistema funcione como esperada.
Teste Unitário
É um roteiro do próprio comportamento de um sistema.
Garantia de que mudanças não quebrem funcionalidades já existentes.
Ah, mas testar dá trabalho!
Desculpe, não tenho tempo para criar testes.
Eu tô cansado de tanto testar as coisas “na mão".
Quando vc lança atualizações sem testes
E coloca o produto em produção
E o sistema falha :(
E você não acredita o que pode ter dado errado…
Então, quais ferramentas que utilizo para testar?
Show! E como funciona testes em Android?
Pastas para tipos de testes
Testes de UI
Testes Unitários
Tá! Agora me apresenta essa tal de Espresso!
Espresso
Parte da Android Support Testing Library
Simula interações com o usuário
Sincronização automática de ações de teste com a UI
Extremamente rápida!
Configurando a Espresso
build.gradle (app)
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) // Android Testing Support Library's runner and rules androidTestCompile ‘com.android.support.test:runner:0.5' androidTestCompile 'com.android.support.test:rules:0.5' // Espresso UI Testing dependencies androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) … }
Dependências
Configurando a Espresso
build.gradle (app)
android { compileSdkVersion 25 buildToolsVersion "24.0.0" defaultConfig { … testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } … }
Test Instrumentation Runner
Anatomia de um Teste de UI
1 Encontrar uma View
2 Executar uma ação
3 Inspecionar o resultado
Anatomia de um Teste de UI
onView(Matcher<View>)
2 Executar uma ação
3 Inspecionar o resultado
Anatomia de um Teste de UI
onView(Matcher<View>)
.perform(ViewAction)
3 Inspecionar o resultado
Anatomia de um Teste de UI
onView(Matcher<View>)
.perform(ViewAction)
.check(ViewAssertion)
Demo - Tela de Login
Criando um Teste de UICriando a classe de Teste@RunWith(AndroidJunit4.class) public class LoginActivityTest { }
Criando um Teste de UIAdicionando uma ActivityTestRule@RunWith(AndroidJunit4.class) public class LoginActivityTest {
@Rule public ActivityTestRule<LoginActivity> activityTestRule = new ActivityTestRule<>(LoginActivity.class);
}
Criando um Teste de UISimulando o preenchimento do campo usuário@RunWith(AndroidJunit4.class) public class MainActivityTest {
… @Test public void clickLoginButton_shouldVerifyCredentials(){ onView(withId(R.id.username_field)) .perform(typeText(“espresso”), closeSoftKeyboard()); }
}
Criando um Teste de UI
@RunWith(AndroidJunit4.class) public class MainActivityTest {
… @Test public void clickLoginButton_shouldVerifyCredentials(){ … onView(withId(R.id.password_field)) .perform(typeText(“35pr3550”), closeSoftKeyboard()); }
}
Simulando o preenchimento do campo senha
Criando um Teste de UI
@RunWith(AndroidJunit4.class) public class MainActivityTest {
… @Test public void clickLoginButton_shouldVerifyCredentials(){ … onView(withId(R.id.login_button)).perform(click()); }
}
Simulando o clique no botão
Criando um Teste de UI
@RunWith(AndroidJunit4.class) public class MainActivityTest {
… @Test public void clickLoginButton_shouldVerifyCredentials(){ … onView(withId(R.id.username_field)).check(matches(hasText("espresso")); }
}
Verifica o conteúdo do campo usuário
Criando um Teste de UI
@RunWith(AndroidJunit4.class) public class MainActivityTest {
… @Test public void clickLoginButton_shouldVerifyCredentials(){ … onView(withId(R.id.password_field)).check(matches(hasText("35pr3550")); }
}
Verifica o conteúdo do campo senha
Status do testeVerificando se ele passou ou não
Dúvidas em Espresso?Espresso Cheat Sheet
Executando o TesteConfigurações - Desabilitar animações
Executando o Teste
Executa todos os testes da classe
1
2
1 Executa o teste selecionado2
No Android Studio
Legal! E agora, onde posso ler mais a respeito da Espresso?
Saiba mais!
Testing Support Library GuideClique para saber mais
Android Testing CodelabClique para saber mais
Android Testing Patterns SeriesClique para saber mais
OBRIGADO!
goo.gl/VBJTIh
@gdgbrasilia
/gdgbrasilia