SlideShare uma empresa Scribd logo
1 de 30
Baixar para ler offline
B H b e a c h p r e s e n t s
ATDDROID
Pedro Rocha
https://github.com/pedroaugustofr/
AndroidConverterATDD
AGENDA
■ Problemas de aplicações Android + TDD
■ Processo de desenvolvimento Android
■ Setup do Gradle e Android Studio
■ Acceptance Tests
●Sem Espresso
●Com Espresso
■ TDD
●Introdução
●Porque do uso de MVP
2
PROBLEMAS DE
APLICAÇÕES
ANDROID + TDD
3
PROBLEMAS RELACIONADOS A APLICAÇÕES ANDROID
■ O sistema operacional faz toda inicialização
■ Arquitetura e documentação não favorece o uso de testes
■ Todos os testes rodam no device
4
PROBLEMAS RELACIONADOS A APLICAÇÕES ANDROID
■ O sistema operacional faz toda inicialização
●Activities, Services, Broadcast Receivers, Content Providers
■ Solução?
5
●Não faça testes unitários para eles, trate-os
como o "main"
tag: cupcake
PROBLEMAS RELACIONADOS A APLICAÇÕES ANDROID
■ Arquitetura e documentação não favorece o uso de testes
●Objetos relacionados a view se misturam com regra de
negócio
●Libraries do Android ficam fortemente acoplados a
códigos que poderiam ser puramente java
■ Solução?
6
●Utilizar o padrão Model-View-Presenter para
diminuir as dependências de componentes
Android e consequentemente os testes
unitários que exigem o device
PROBLEMAS RELACIONADOS A APLICAÇÕES ANDROID
■ Todos os testes rodam no device
●Todas as ferramentas que acompanham o Android
assumem que os testes irão executar dentro de
aplicações Android
■ Solução?
7
●Criar um módulo que possui somente código
java "puro" para conseguir rodar o JUnit sem
precisar do device
PROCESSO DE
DESENVOLVIMENTO
ANDROID
8
PROCESSO DE DESENVOLVIMENTO ANDROID
■ Pré-condição
●Considerando que o projeto tenha user stories e as
mesmas já estão priorizadas
●Considere também que as user stories já tenham
exemplos concretos definidos
9
PROCESSO DE DESENVOLVIMENTO ANDROID
■ Execução
● Selecione a user story
● Spike sobre a user story (Opcional)
● Automatize um exemplo com testes de aceitação
● Implemente a funcionalidade
- Implemente a funcionalidade utilizando TDD
- Normalmente utilizando a técnica presenter-first
● Faça a conexão entre o presenter e a view
● Verifique os testes de aceitação, neste ponto eles devem
passar
● Selecione o próximo exemplo e retorne ao passo
10
ATDD
Cycle
PROCESSO DE DESENVOLVIMENTO ANDROID
11
SETUP DO GRADLE E
ANDROID STUDIO
12
SETUP DO GRADLE E ANDROID STUDIO
■ Dependências para os testes de aceitação
■ Criando novo módulo para o core da aplicação
■ Dependências para os testes unitários
■ Criando Run/Debug configurations no Android Studio
13
DEPENDÊNCIAS PARA OS TESTES DE
ACEITAÇÃO
14
app/build.gradle
android {
…
defaultConfig {
…
testInstrumentationRunner
‘android.support.test.runner.AndroidJUnitRunner’
}
…
}
dependencies {
…
androidTestCompile 'com.android.support.test:runner:0.3'
androidTestCompile 'com.android.support.test:rules:0.3'
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2'
}
tag: donut
CRIANDO NOVO MÓDULO PARA CORE DA
APLICAÇÃO
15
app/build.gradle
…
dependencies {
compile project(':core')
…
}
▫︎Criando um novo módulo:
▫︎File / New… / New Module.. / Java Library
▫︎Adicionando o novo módulo como dependência:
tag: eclair
DEPENDÊNCIAS PARA OS TESTES UNITÁRIOS
16
new_module/build.gradle
dependencies {
…
testCompile 'junit:junit:4.12'
testCompile 'jmock:jmock:1.2.0'
}
tag: froyo
CRIANDO RUN/DEBUG CONFIGURATIONS NO ANDROID STUDIO
17
▫︎Criando novo Run Configuration
▫︎Run / Edit Configurations…
▫︎Adicionando Configuração pra rodar testes de aceitação:
▫︎Add New Configuration / Android Tests
▫︎Selecione o módulo: app
▫︎Adicione o Instrumentation Runner:
▫︎android.support.test.runner.AndroidJUnitRunner
▫︎Adicionando Configuração para rodar testes unitários
▫︎Add New Configuration / JUnit
▫︎Package: com.your.package
▫︎Use classpath of mod…: your_module
▫︎Before launch:
▫︎Change from Make to Gradle-aware Make
ACCEPTANCE TESTS
18
ACCEPTANCE TESTS
É o teste responsável por verificar o sistema em
relação aos seus pré-requisitos originais em um
ambiente igual ou o mais parecido possível com o
ambiente de produção. Simula o comportamento do
usuário em relação ao sistema.
19
ACCEPTANCE TESTS
Sem
Espresso
20
X Com
Espresso
ACCEPTANCE TESTS - WITHOUT ESPRESSO
21
@RunWith(AndroidJUnit4.class)

public class WithoutEspressoTest {
@Rule

public final ActivityTestRule<MainActivity> main = new ActivityTestRule<>(MainActivity.class);



@Test

@UiThreadTest

public void testInchesToCentimeters() throws Exception {

givenTheUserSelectedConversion("in", “cm");

whenTheUserEnters("2");

thenTheResultIs("2.00 in = 5.08 cm");

}
private void givenTheUserSelectedConversion(String fromUnit, String toUnit) {

getField(R.id.fromUnitEditText).setText(fromUnit);

getField(R.id.toUnitEditText).setText(toUnit);

}



private void whenTheUserEnters(String inputNumber) {

getField(R.id.inputNumberEditText).setText(inputNumber);

}



private void thenTheResultIs(String expectedResult) {

assertEquals(expectedResult, getField(R.id.resultTextView).getText().toString());

}



private TextView getField(int id) {

return (TextView) main.getActivity().findViewById(id);

}
}
tag: gingerbread
ACCEPTANCE TESTS - WITH ESPRESSO
22
@RunWith(AndroidJUnit4.class)

public class EspressoTest {



@Rule
public final ActivityTestRule<MainActivity> main = new ActivityTestRule<>(MainActivity.class);



@Test

public void testInchesToCentimeters() {

onView(ViewMatchers.withId(R.id.inputNumberEditText)).perform(typeText("2"));

onView(withId(R.id.fromUnitEditText)).perform(typeText("in"));

onView(withId(R.id.toUnitEditText)).perform(typeText("cm"));

onView(withId(R.id.resultTextView)).check(matches(ViewMatchers.withText("2.00 in = 5.08 cm")));

}
}
tag: honeycomb
TDD
23
TDD - INTRODUÇÃO
É o desenvolvimento de software orientado a testes. O
ciclo de desenvolvimento utilizando TDD é chamado de
red-green-refactor.
24tag: icecream
TDD
Como facilitar o uso de TDD no Android?
25tag: jellybeam
TDD - MVP
Por que MVP?
26tag: kitkat
TDD - MVP
27
Comece os testes unitários pelo presenter.
REFERÊNCIAS
28
REFERÊNCIAS
■ Matteo Vaccari and Carlo Bellettini, TDD for Android - How to
do Test-Driven Development well
■ Antonio Leiva, MVP for Android: how to organize the
presentation layer - http://antonioleiva.com/mvp-android/
■ Dicussão no MyThoughtWorks - https://
thoughtworks.jiveon.com/message/401507#401507
■ Configuração do ambiente para CI e TDD - http://
stablekernel.com/blog/continuous-delivery-android-part-1/
■ Diversos tutoriais de Android - http://www.vogella.com/
tutorials/android.html
29
Dúvidas:
procha@thoughtworks.com
Sujestões:
https://github.com/pedroaugustofr/
AndroidConverterATDD
THANK YOU

Mais conteúdo relacionado

Mais procurados

Realizando a gestão de testes e o controle de defeitos
Realizando a gestão de testes e o controle de defeitosRealizando a gestão de testes e o controle de defeitos
Realizando a gestão de testes e o controle de defeitosVIVIANE RANGEL
 
Indo além com Automação de Testes de Apps Android
Indo além com Automação de Testes de Apps AndroidIndo além com Automação de Testes de Apps Android
Indo além com Automação de Testes de Apps AndroidEduardo Carrara de Araujo
 
Testes com TestLink e Selenium
Testes com TestLink e SeleniumTestes com TestLink e Selenium
Testes com TestLink e SeleniumAndré Thiago
 
Desenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com JunitDesenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com JunitAdolfo Neto
 
JUnit: framework de testes unitários
JUnit: framework de testes unitáriosJUnit: framework de testes unitários
JUnit: framework de testes unitárioselliando dias
 
Testes de Unidade com JUnit
Testes de Unidade com JUnitTestes de Unidade com JUnit
Testes de Unidade com JUnitelliando dias
 
Como ensinei mais de 1000 testadores
Como ensinei mais de 1000 testadoresComo ensinei mais de 1000 testadores
Como ensinei mais de 1000 testadoresElias Nogueira
 
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...minastestingconference
 
Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Diego Pacheco
 
Testes Automatizados de Software
Testes Automatizados de SoftwareTestes Automatizados de Software
Testes Automatizados de SoftwareMaurício Aniche
 
Mutant Testing: um mundo para um X-Testing.
Mutant Testing: um mundo para um X-Testing.Mutant Testing: um mundo para um X-Testing.
Mutant Testing: um mundo para um X-Testing.Robson Agapito Correa
 

Mais procurados (20)

Realizando a gestão de testes e o controle de defeitos
Realizando a gestão de testes e o controle de defeitosRealizando a gestão de testes e o controle de defeitos
Realizando a gestão de testes e o controle de defeitos
 
Indo além com Automação de Testes de Apps Android
Indo além com Automação de Testes de Apps AndroidIndo além com Automação de Testes de Apps Android
Indo além com Automação de Testes de Apps Android
 
Junit 4.0
Junit 4.0Junit 4.0
Junit 4.0
 
Junit
JunitJunit
Junit
 
Palestra Testes De Unidade Com JUnit
Palestra Testes De Unidade Com JUnitPalestra Testes De Unidade Com JUnit
Palestra Testes De Unidade Com JUnit
 
Testes com TestLink e Selenium
Testes com TestLink e SeleniumTestes com TestLink e Selenium
Testes com TestLink e Selenium
 
Desenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com JunitDesenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com Junit
 
JUnit: framework de testes unitários
JUnit: framework de testes unitáriosJUnit: framework de testes unitários
JUnit: framework de testes unitários
 
Testes de Unidade com JUnit
Testes de Unidade com JUnitTestes de Unidade com JUnit
Testes de Unidade com JUnit
 
Selenium
SeleniumSelenium
Selenium
 
Como ensinei mais de 1000 testadores
Como ensinei mais de 1000 testadoresComo ensinei mais de 1000 testadores
Como ensinei mais de 1000 testadores
 
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
 
Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1
 
Testes Automatizados de Software
Testes Automatizados de SoftwareTestes Automatizados de Software
Testes Automatizados de Software
 
Debugging node
Debugging nodeDebugging node
Debugging node
 
Mutant Testing: um mundo para um X-Testing.
Mutant Testing: um mundo para um X-Testing.Mutant Testing: um mundo para um X-Testing.
Mutant Testing: um mundo para um X-Testing.
 
Testes Unitários
Testes UnitáriosTestes Unitários
Testes Unitários
 
TDD com Python
TDD com PythonTDD com Python
TDD com Python
 
JUnit
JUnitJUnit
JUnit
 
Android agile-testing
Android agile-testingAndroid agile-testing
Android agile-testing
 

Semelhante a ATDD Android

Paralelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidosParalelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidosElias Nogueira
 
Android DevConference - Automatizando testes sem sofrimento
Android DevConference - Automatizando testes sem sofrimentoAndroid DevConference - Automatizando testes sem sofrimento
Android DevConference - Automatizando testes sem sofrimentoiMasters
 
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...Claudinei Brito Junior
 
Testes de Unidade com Junit
Testes de Unidade com JunitTestes de Unidade com Junit
Testes de Unidade com Junitcejug
 
Teste de Integração - Unidade III
Teste de Integração - Unidade IIITeste de Integração - Unidade III
Teste de Integração - Unidade IIIJoão Lourenço
 
Desenvolvimento Guiado por Testes
Desenvolvimento Guiado por TestesDesenvolvimento Guiado por Testes
Desenvolvimento Guiado por Testeselliando dias
 
2017 08-11 - Androidos V - Minicurso - Introdução ao android
2017 08-11 - Androidos V - Minicurso - Introdução ao android2017 08-11 - Androidos V - Minicurso - Introdução ao android
2017 08-11 - Androidos V - Minicurso - Introdução ao androidMessias Batista
 
Android Dev Conference 2017 - Automação de Testes na Cloud
Android Dev Conference 2017 - Automação de Testes na CloudAndroid Dev Conference 2017 - Automação de Testes na Cloud
Android Dev Conference 2017 - Automação de Testes na CloudiMasters
 
Importância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOpsImportância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOpsSamanta Cicilia
 
Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesCamilo Ribeiro
 
Estratégias para o uso de integração e entrega contínua com gocd
Estratégias para o uso de integração e entrega contínua com gocdEstratégias para o uso de integração e entrega contínua com gocd
Estratégias para o uso de integração e entrega contínua com gocdWalmyr Lima e Silva Filho
 
Android Studio: Primeiros Passos
Android Studio: Primeiros PassosAndroid Studio: Primeiros Passos
Android Studio: Primeiros PassosRomualdo Andre
 
[Uff] Continuous Delivery: Entrega Contínua de Software de Valor
[Uff] Continuous Delivery: Entrega Contínua de Software de Valor[Uff] Continuous Delivery: Entrega Contínua de Software de Valor
[Uff] Continuous Delivery: Entrega Contínua de Software de ValorSamanta Cicilia
 
Testes e depuração de código com Python
Testes e depuração de código com PythonTestes e depuração de código com Python
Testes e depuração de código com PythonDorneles Treméa
 
Curso: Desenvolvimento de aplicativos híbridos (dia 2)
Curso: Desenvolvimento de aplicativos híbridos (dia 2)Curso: Desenvolvimento de aplicativos híbridos (dia 2)
Curso: Desenvolvimento de aplicativos híbridos (dia 2)Wennder Santos
 
Boas práticas para deploy contínuo com drupal
Boas práticas para deploy contínuo com drupalBoas práticas para deploy contínuo com drupal
Boas práticas para deploy contínuo com drupalRenato Vasconcellos Gomes
 
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018Renato Groff
 
Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...
Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...
Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...Edlaine Zamora
 
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Grupo Bandeirantes - ...
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Grupo Bandeirantes - ...Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Grupo Bandeirantes - ...
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Grupo Bandeirantes - ...Renato Groff
 

Semelhante a ATDD Android (20)

Paralelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidosParalelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidos
 
Android DevConference - Automatizando testes sem sofrimento
Android DevConference - Automatizando testes sem sofrimentoAndroid DevConference - Automatizando testes sem sofrimento
Android DevConference - Automatizando testes sem sofrimento
 
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
 
Testes de Unidade com Junit
Testes de Unidade com JunitTestes de Unidade com Junit
Testes de Unidade com Junit
 
Teste de Integração - Unidade III
Teste de Integração - Unidade IIITeste de Integração - Unidade III
Teste de Integração - Unidade III
 
Desenvolvimento Guiado por Testes
Desenvolvimento Guiado por TestesDesenvolvimento Guiado por Testes
Desenvolvimento Guiado por Testes
 
2017 08-11 - Androidos V - Minicurso - Introdução ao android
2017 08-11 - Androidos V - Minicurso - Introdução ao android2017 08-11 - Androidos V - Minicurso - Introdução ao android
2017 08-11 - Androidos V - Minicurso - Introdução ao android
 
Android Dev Conference 2017 - Automação de Testes na Cloud
Android Dev Conference 2017 - Automação de Testes na CloudAndroid Dev Conference 2017 - Automação de Testes na Cloud
Android Dev Conference 2017 - Automação de Testes na Cloud
 
Importância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOpsImportância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOps
 
Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por Testes
 
Estratégias para o uso de integração e entrega contínua com gocd
Estratégias para o uso de integração e entrega contínua com gocdEstratégias para o uso de integração e entrega contínua com gocd
Estratégias para o uso de integração e entrega contínua com gocd
 
Android Studio: Primeiros Passos
Android Studio: Primeiros PassosAndroid Studio: Primeiros Passos
Android Studio: Primeiros Passos
 
[Uff] Continuous Delivery: Entrega Contínua de Software de Valor
[Uff] Continuous Delivery: Entrega Contínua de Software de Valor[Uff] Continuous Delivery: Entrega Contínua de Software de Valor
[Uff] Continuous Delivery: Entrega Contínua de Software de Valor
 
Testes e depuração de código com Python
Testes e depuração de código com PythonTestes e depuração de código com Python
Testes e depuração de código com Python
 
Curso: Desenvolvimento de aplicativos híbridos (dia 2)
Curso: Desenvolvimento de aplicativos híbridos (dia 2)Curso: Desenvolvimento de aplicativos híbridos (dia 2)
Curso: Desenvolvimento de aplicativos híbridos (dia 2)
 
Boas práticas para deploy contínuo com drupal
Boas práticas para deploy contínuo com drupalBoas práticas para deploy contínuo com drupal
Boas práticas para deploy contínuo com drupal
 
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018
 
Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...
Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...
Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...
 
Teste de software
Teste de softwareTeste de software
Teste de software
 
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Grupo Bandeirantes - ...
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Grupo Bandeirantes - ...Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Grupo Bandeirantes - ...
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Grupo Bandeirantes - ...
 

ATDD Android

  • 1. B H b e a c h p r e s e n t s ATDDROID Pedro Rocha https://github.com/pedroaugustofr/ AndroidConverterATDD
  • 2. AGENDA ■ Problemas de aplicações Android + TDD ■ Processo de desenvolvimento Android ■ Setup do Gradle e Android Studio ■ Acceptance Tests ●Sem Espresso ●Com Espresso ■ TDD ●Introdução ●Porque do uso de MVP 2
  • 4. PROBLEMAS RELACIONADOS A APLICAÇÕES ANDROID ■ O sistema operacional faz toda inicialização ■ Arquitetura e documentação não favorece o uso de testes ■ Todos os testes rodam no device 4
  • 5. PROBLEMAS RELACIONADOS A APLICAÇÕES ANDROID ■ O sistema operacional faz toda inicialização ●Activities, Services, Broadcast Receivers, Content Providers ■ Solução? 5 ●Não faça testes unitários para eles, trate-os como o "main" tag: cupcake
  • 6. PROBLEMAS RELACIONADOS A APLICAÇÕES ANDROID ■ Arquitetura e documentação não favorece o uso de testes ●Objetos relacionados a view se misturam com regra de negócio ●Libraries do Android ficam fortemente acoplados a códigos que poderiam ser puramente java ■ Solução? 6 ●Utilizar o padrão Model-View-Presenter para diminuir as dependências de componentes Android e consequentemente os testes unitários que exigem o device
  • 7. PROBLEMAS RELACIONADOS A APLICAÇÕES ANDROID ■ Todos os testes rodam no device ●Todas as ferramentas que acompanham o Android assumem que os testes irão executar dentro de aplicações Android ■ Solução? 7 ●Criar um módulo que possui somente código java "puro" para conseguir rodar o JUnit sem precisar do device
  • 9. PROCESSO DE DESENVOLVIMENTO ANDROID ■ Pré-condição ●Considerando que o projeto tenha user stories e as mesmas já estão priorizadas ●Considere também que as user stories já tenham exemplos concretos definidos 9
  • 10. PROCESSO DE DESENVOLVIMENTO ANDROID ■ Execução ● Selecione a user story ● Spike sobre a user story (Opcional) ● Automatize um exemplo com testes de aceitação ● Implemente a funcionalidade - Implemente a funcionalidade utilizando TDD - Normalmente utilizando a técnica presenter-first ● Faça a conexão entre o presenter e a view ● Verifique os testes de aceitação, neste ponto eles devem passar ● Selecione o próximo exemplo e retorne ao passo 10 ATDD Cycle
  • 12. SETUP DO GRADLE E ANDROID STUDIO 12
  • 13. SETUP DO GRADLE E ANDROID STUDIO ■ Dependências para os testes de aceitação ■ Criando novo módulo para o core da aplicação ■ Dependências para os testes unitários ■ Criando Run/Debug configurations no Android Studio 13
  • 14. DEPENDÊNCIAS PARA OS TESTES DE ACEITAÇÃO 14 app/build.gradle android { … defaultConfig { … testInstrumentationRunner ‘android.support.test.runner.AndroidJUnitRunner’ } … } dependencies { … androidTestCompile 'com.android.support.test:runner:0.3' androidTestCompile 'com.android.support.test:rules:0.3' androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2' } tag: donut
  • 15. CRIANDO NOVO MÓDULO PARA CORE DA APLICAÇÃO 15 app/build.gradle … dependencies { compile project(':core') … } ▫︎Criando um novo módulo: ▫︎File / New… / New Module.. / Java Library ▫︎Adicionando o novo módulo como dependência: tag: eclair
  • 16. DEPENDÊNCIAS PARA OS TESTES UNITÁRIOS 16 new_module/build.gradle dependencies { … testCompile 'junit:junit:4.12' testCompile 'jmock:jmock:1.2.0' } tag: froyo
  • 17. CRIANDO RUN/DEBUG CONFIGURATIONS NO ANDROID STUDIO 17 ▫︎Criando novo Run Configuration ▫︎Run / Edit Configurations… ▫︎Adicionando Configuração pra rodar testes de aceitação: ▫︎Add New Configuration / Android Tests ▫︎Selecione o módulo: app ▫︎Adicione o Instrumentation Runner: ▫︎android.support.test.runner.AndroidJUnitRunner ▫︎Adicionando Configuração para rodar testes unitários ▫︎Add New Configuration / JUnit ▫︎Package: com.your.package ▫︎Use classpath of mod…: your_module ▫︎Before launch: ▫︎Change from Make to Gradle-aware Make
  • 19. ACCEPTANCE TESTS É o teste responsável por verificar o sistema em relação aos seus pré-requisitos originais em um ambiente igual ou o mais parecido possível com o ambiente de produção. Simula o comportamento do usuário em relação ao sistema. 19
  • 21. ACCEPTANCE TESTS - WITHOUT ESPRESSO 21 @RunWith(AndroidJUnit4.class)
 public class WithoutEspressoTest { @Rule
 public final ActivityTestRule<MainActivity> main = new ActivityTestRule<>(MainActivity.class);
 
 @Test
 @UiThreadTest
 public void testInchesToCentimeters() throws Exception {
 givenTheUserSelectedConversion("in", “cm");
 whenTheUserEnters("2");
 thenTheResultIs("2.00 in = 5.08 cm");
 } private void givenTheUserSelectedConversion(String fromUnit, String toUnit) {
 getField(R.id.fromUnitEditText).setText(fromUnit);
 getField(R.id.toUnitEditText).setText(toUnit);
 }
 
 private void whenTheUserEnters(String inputNumber) {
 getField(R.id.inputNumberEditText).setText(inputNumber);
 }
 
 private void thenTheResultIs(String expectedResult) {
 assertEquals(expectedResult, getField(R.id.resultTextView).getText().toString());
 }
 
 private TextView getField(int id) {
 return (TextView) main.getActivity().findViewById(id);
 } } tag: gingerbread
  • 22. ACCEPTANCE TESTS - WITH ESPRESSO 22 @RunWith(AndroidJUnit4.class)
 public class EspressoTest {
 
 @Rule public final ActivityTestRule<MainActivity> main = new ActivityTestRule<>(MainActivity.class);
 
 @Test
 public void testInchesToCentimeters() {
 onView(ViewMatchers.withId(R.id.inputNumberEditText)).perform(typeText("2"));
 onView(withId(R.id.fromUnitEditText)).perform(typeText("in"));
 onView(withId(R.id.toUnitEditText)).perform(typeText("cm"));
 onView(withId(R.id.resultTextView)).check(matches(ViewMatchers.withText("2.00 in = 5.08 cm")));
 } } tag: honeycomb
  • 24. TDD - INTRODUÇÃO É o desenvolvimento de software orientado a testes. O ciclo de desenvolvimento utilizando TDD é chamado de red-green-refactor. 24tag: icecream
  • 25. TDD Como facilitar o uso de TDD no Android? 25tag: jellybeam
  • 26. TDD - MVP Por que MVP? 26tag: kitkat
  • 27. TDD - MVP 27 Comece os testes unitários pelo presenter.
  • 29. REFERÊNCIAS ■ Matteo Vaccari and Carlo Bellettini, TDD for Android - How to do Test-Driven Development well ■ Antonio Leiva, MVP for Android: how to organize the presentation layer - http://antonioleiva.com/mvp-android/ ■ Dicussão no MyThoughtWorks - https:// thoughtworks.jiveon.com/message/401507#401507 ■ Configuração do ambiente para CI e TDD - http:// stablekernel.com/blog/continuous-delivery-android-part-1/ ■ Diversos tutoriais de Android - http://www.vogella.com/ tutorials/android.html 29