32
Globalcode – Open4education Testes de Unidade com Robolectric Lucas Albuquerque / Stefan Teixeira [email protected] / [email protected]

Testes de Unidade com Robolectric - Sucesu-Rssucesurs.org.br/.../tdc2015testesunidaderobolectric.pdf• Framework para Testes de Unidade • Open-source (licença MIT) • Mais compatível

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Testes de Unidade com Robolectric - Sucesu-Rssucesurs.org.br/.../tdc2015testesunidaderobolectric.pdf• Framework para Testes de Unidade • Open-source (licença MIT) • Mais compatível

Globalcode – Open4education

Testes de Unidade com Robolectric

Lucas Albuquerque / Stefan [email protected] / [email protected]

Page 2: Testes de Unidade com Robolectric - Sucesu-Rssucesurs.org.br/.../tdc2015testesunidaderobolectric.pdf• Framework para Testes de Unidade • Open-source (licença MIT) • Mais compatível

About LucasLucas Albuquerque

• Mobile / Backend Developer @ M4U

Contatos:

• E-mail: [email protected]• Facebook: facebook.com/olucasalbuquerque• LinkedIn: linkedin.com/in/lucasalbuquerque• GitHub: github.com/lalbuquerque• SlideShare: slideshare.net/olucasalbuquerque

Page 3: Testes de Unidade com Robolectric - Sucesu-Rssucesurs.org.br/.../tdc2015testesunidaderobolectric.pdf• Framework para Testes de Unidade • Open-source (licença MIT) • Mais compatível

About StefanStefan Teixeira

• QA / DevOps @ Rastreabilidade Brasil• Mantém um blog técnico: stefanteixeira.com.br

Contatos:

• E-mail: [email protected]• Twitter: twitter.com/stefan_teixeira• Facebook: facebook.com/stefan.teixeira• LinkedIn: linkedin.com/in/stefanteixeira• GitHub: github.com/stefanteixeira• SlideShare: slideshare.net/stefanteixeira

Page 4: Testes de Unidade com Robolectric - Sucesu-Rssucesurs.org.br/.../tdc2015testesunidaderobolectric.pdf• Framework para Testes de Unidade • Open-source (licença MIT) • Mais compatível

Como vocês testam apps Android?

Pergunta:

Page 5: Testes de Unidade com Robolectric - Sucesu-Rssucesurs.org.br/.../tdc2015testesunidaderobolectric.pdf• Framework para Testes de Unidade • Open-source (licença MIT) • Mais compatível

(a) Testes manuais

Page 6: Testes de Unidade com Robolectric - Sucesu-Rssucesurs.org.br/.../tdc2015testesunidaderobolectric.pdf• Framework para Testes de Unidade • Open-source (licença MIT) • Mais compatível

(b) Testes pela UI

Page 7: Testes de Unidade com Robolectric - Sucesu-Rssucesurs.org.br/.../tdc2015testesunidaderobolectric.pdf• Framework para Testes de Unidade • Open-source (licença MIT) • Mais compatível

(c) Testes de Unidade

Page 8: Testes de Unidade com Robolectric - Sucesu-Rssucesurs.org.br/.../tdc2015testesunidaderobolectric.pdf• Framework para Testes de Unidade • Open-source (licença MIT) • Mais compatível

(d) Testes são para os fracos

Page 9: Testes de Unidade com Robolectric - Sucesu-Rssucesurs.org.br/.../tdc2015testesunidaderobolectric.pdf• Framework para Testes de Unidade • Open-source (licença MIT) • Mais compatível

Pirâmide de Automação de Testes

Page 10: Testes de Unidade com Robolectric - Sucesu-Rssucesurs.org.br/.../tdc2015testesunidaderobolectric.pdf• Framework para Testes de Unidade • Open-source (licença MIT) • Mais compatível
Page 11: Testes de Unidade com Robolectric - Sucesu-Rssucesurs.org.br/.../tdc2015testesunidaderobolectric.pdf• Framework para Testes de Unidade • Open-source (licença MIT) • Mais compatível

↑ # de testes↑ feedback

↓ # de testes↓ feedback

Page 12: Testes de Unidade com Robolectric - Sucesu-Rssucesurs.org.br/.../tdc2015testesunidaderobolectric.pdf• Framework para Testes de Unidade • Open-source (licença MIT) • Mais compatível

Mas e para apps Mobile?

Page 13: Testes de Unidade com Robolectric - Sucesu-Rssucesurs.org.br/.../tdc2015testesunidaderobolectric.pdf• Framework para Testes de Unidade • Open-source (licença MIT) • Mais compatível

http://www.ministryoftesting.com/2014/10/mobile-test-pyramid/

Page 14: Testes de Unidade com Robolectric - Sucesu-Rssucesurs.org.br/.../tdc2015testesunidaderobolectric.pdf• Framework para Testes de Unidade • Open-source (licença MIT) • Mais compatível

http://www.ministryoftesting.com/2014/10/mobile-test-pyramid/

↑ # de testes↓ feedback

↓ # de testes↑ feedback

“… not every unit or methodof mobile apps can be tested

in a isolated manner"

Page 15: Testes de Unidade com Robolectric - Sucesu-Rssucesurs.org.br/.../tdc2015testesunidaderobolectric.pdf• Framework para Testes de Unidade • Open-source (licença MIT) • Mais compatível

Podemos resolver isso com o Robolectric!

Page 16: Testes de Unidade com Robolectric - Sucesu-Rssucesurs.org.br/.../tdc2015testesunidaderobolectric.pdf• Framework para Testes de Unidade • Open-source (licença MIT) • Mais compatível

O que é?

• Framework para Testes de Unidade

• Open-source (licença MIT)

• Mais compatível com a forma que a maioria dos desenvolvedores Android desenvolvem

• Testes rodam na JVM (sem necessidade de Emulador/Device)

➡ Execução MUITO rápida

➡ Um projeto da Pivotal Labs com Robolectric rodava 1047 testes em 28s!

Page 17: Testes de Unidade com Robolectric - Sucesu-Rssucesurs.org.br/.../tdc2015testesunidaderobolectric.pdf• Framework para Testes de Unidade • Open-source (licença MIT) • Mais compatível
Page 18: Testes de Unidade com Robolectric - Sucesu-Rssucesurs.org.br/.../tdc2015testesunidaderobolectric.pdf• Framework para Testes de Unidade • Open-source (licença MIT) • Mais compatível

Como funciona?

Shadow Objects e

View Resource Loading

Page 19: Testes de Unidade com Robolectric - Sucesu-Rssucesurs.org.br/.../tdc2015testesunidaderobolectric.pdf• Framework para Testes de Unidade • Open-source (licença MIT) • Mais compatível

Shadow ObjectsShadows são como proxies para as classes do Android

Exemplos:

ShadowImageView é o proxy de ImageView

OU

AndroidObject.someMethod() ShadowAndroidObject.someMethod()faz proxy de

Page 20: Testes de Unidade com Robolectric - Sucesu-Rssucesurs.org.br/.../tdc2015testesunidaderobolectric.pdf• Framework para Testes de Unidade • Open-source (licença MIT) • Mais compatível

http://www.slideshare.net/joemoore1/tdd-android-applications-with-robolectric

Shadow Objects

Page 21: Testes de Unidade com Robolectric - Sucesu-Rssucesurs.org.br/.../tdc2015testesunidaderobolectric.pdf• Framework para Testes de Unidade • Open-source (licença MIT) • Mais compatível

Shadow Objects

Mas por que preciso usá-los?

Page 22: Testes de Unidade com Robolectric - Sucesu-Rssucesurs.org.br/.../tdc2015testesunidaderobolectric.pdf• Framework para Testes de Unidade • Open-source (licença MIT) • Mais compatível

View e Resource Loading

Robolectric faz parse dos arquivos de layout e monta uma árvore de views composta pelos view objects e suas shadows.

Page 23: Testes de Unidade com Robolectric - Sucesu-Rssucesurs.org.br/.../tdc2015testesunidaderobolectric.pdf• Framework para Testes de Unidade • Open-source (licença MIT) • Mais compatível

Que tipo de testes posso fazer com

Robolectric?

Page 24: Testes de Unidade com Robolectric - Sucesu-Rssucesurs.org.br/.../tdc2015testesunidaderobolectric.pdf• Framework para Testes de Unidade • Open-source (licença MIT) • Mais compatível
Page 25: Testes de Unidade com Robolectric - Sucesu-Rssucesurs.org.br/.../tdc2015testesunidaderobolectric.pdf• Framework para Testes de Unidade • Open-source (licença MIT) • Mais compatível
Page 26: Testes de Unidade com Robolectric - Sucesu-Rssucesurs.org.br/.../tdc2015testesunidaderobolectric.pdf• Framework para Testes de Unidade • Open-source (licença MIT) • Mais compatível
Page 27: Testes de Unidade com Robolectric - Sucesu-Rssucesurs.org.br/.../tdc2015testesunidaderobolectric.pdf• Framework para Testes de Unidade • Open-source (licença MIT) • Mais compatível
Page 28: Testes de Unidade com Robolectric - Sucesu-Rssucesurs.org.br/.../tdc2015testesunidaderobolectric.pdf• Framework para Testes de Unidade • Open-source (licença MIT) • Mais compatível

Robolectricx

ActivityUnitTestCase

Page 29: Testes de Unidade com Robolectric - Sucesu-Rssucesurs.org.br/.../tdc2015testesunidaderobolectric.pdf• Framework para Testes de Unidade • Open-source (licença MIT) • Mais compatível

Robolectric x ActivityUnitTestCase

• Android disponibilizou recentemente suporte a Unit Tests (https://developer.android.com/training/activity-testing/activity-unit-testing.html)

• MAS… Assim como os Instrumentation Tests, os testes devem ser escritos com JUnit 3 :(

➡ Sem annotations

➡ Sem ignores

➡ Sem @BeforeClass / @AfterClass

➡ Sem static imports

Page 30: Testes de Unidade com Robolectric - Sucesu-Rssucesurs.org.br/.../tdc2015testesunidaderobolectric.pdf• Framework para Testes de Unidade • Open-source (licença MIT) • Mais compatível

Hands-on

Page 31: Testes de Unidade com Robolectric - Sucesu-Rssucesurs.org.br/.../tdc2015testesunidaderobolectric.pdf• Framework para Testes de Unidade • Open-source (licença MIT) • Mais compatível

Hands-on

• Visão geral do app de exemplo: https://github.com/lalbuquerque/notes

• Testes de unidade com Robolectric

• Cobertura de código com JaCoCo

• Build do app no CircleCI

Page 32: Testes de Unidade com Robolectric - Sucesu-Rssucesurs.org.br/.../tdc2015testesunidaderobolectric.pdf• Framework para Testes de Unidade • Open-source (licença MIT) • Mais compatível

Globalcode – Open4education

Obrigado!