test pyramid in an android agile project - tdc2013
DESCRIPTION
Slides created originally by @rafaelportela to Ágiles 2013 Perú and adapted to our presentation at TDC (The Developer's Conference) 2013 Porto Alegre. How to balance your android test suite to have a good feedback, from units to end-to-end tests.TRANSCRIPT
![Page 1: Test pyramid in an Android Agile Project - TDC2013](https://reader034.vdocuments.mx/reader034/viewer/2022051611/54b552d14a7959b92c8b4668/html5/thumbnails/1.jpg)
Test Pyramid in an
Android Agile Project
How to balance your android test suite to have a good feedback, from units to end-to-end tests.
PORTELA GHISI
![Page 2: Test pyramid in an Android Agile Project - TDC2013](https://reader034.vdocuments.mx/reader034/viewer/2022051611/54b552d14a7959b92c8b4668/html5/thumbnails/2.jpg)
Tests, seriously? It’s a mobile app... [ ]
![Page 3: Test pyramid in an Android Agile Project - TDC2013](https://reader034.vdocuments.mx/reader034/viewer/2022051611/54b552d14a7959b92c8b4668/html5/thumbnails/3.jpg)
Shared codebases
15+
![Page 4: Test pyramid in an Android Agile Project - TDC2013](https://reader034.vdocuments.mx/reader034/viewer/2022051611/54b552d14a7959b92c8b4668/html5/thumbnails/4.jpg)
Devs, QAs and Ops
40+
![Page 5: Test pyramid in an Android Agile Project - TDC2013](https://reader034.vdocuments.mx/reader034/viewer/2022051611/54b552d14a7959b92c8b4668/html5/thumbnails/5.jpg)
h6p://mar:nfowler.com/bliki/TestPyramid.html
![Page 6: Test pyramid in an Android Agile Project - TDC2013](https://reader034.vdocuments.mx/reader034/viewer/2022051611/54b552d14a7959b92c8b4668/html5/thumbnails/6.jpg)
Unit Test
• Verify small pieces individually
• Run fast
• Run a lot of times during development
• Feedback instantly
![Page 7: Test pyramid in an Android Agile Project - TDC2013](https://reader034.vdocuments.mx/reader034/viewer/2022051611/54b552d14a7959b92c8b4668/html5/thumbnails/7.jpg)
Feedback
![Page 8: Test pyramid in an Android Agile Project - TDC2013](https://reader034.vdocuments.mx/reader034/viewer/2022051611/54b552d14a7959b92c8b4668/html5/thumbnails/8.jpg)
Android? It’s Java, let’s TDD.
![Page 9: Test pyramid in an Android Agile Project - TDC2013](https://reader034.vdocuments.mx/reader034/viewer/2022051611/54b552d14a7959b92c8b4668/html5/thumbnails/9.jpg)
Android TDD
java.lang.Run:meExcep:on: Stub!
Android SDK classes are not trivial
eyes on docs
huge API
![Page 10: Test pyramid in an Android Agile Project - TDC2013](https://reader034.vdocuments.mx/reader034/viewer/2022051611/54b552d14a7959b92c8b4668/html5/thumbnails/10.jpg)
test object
result()
assert(expected, obj.result())
Humm, I’ve seen that.. The ‘2 + 2 = 4’ example!
![Page 11: Test pyramid in an Android Agile Project - TDC2013](https://reader034.vdocuments.mx/reader034/viewer/2022051611/54b552d14a7959b92c8b4668/html5/thumbnails/11.jpg)
the object u’re looking at
dependencies
![Page 12: Test pyramid in an Android Agile Project - TDC2013](https://reader034.vdocuments.mx/reader034/viewer/2022051611/54b552d14a7959b92c8b4668/html5/thumbnails/12.jpg)
getData()
saveSomething()
![Page 13: Test pyramid in an Android Agile Project - TDC2013](https://reader034.vdocuments.mx/reader034/viewer/2022051611/54b552d14a7959b92c8b4668/html5/thumbnails/13.jpg)
getData()
saveSomething()
when(stub.getData()).thenReturn(data)
verify(mock).saveSomething()
![Page 14: Test pyramid in an Android Agile Project - TDC2013](https://reader034.vdocuments.mx/reader034/viewer/2022051611/54b552d14a7959b92c8b4668/html5/thumbnails/14.jpg)
h6p://mar:nfowler.com/ar:cles/mocksArentStubs.html
mock stub double
![Page 15: Test pyramid in an Android Agile Project - TDC2013](https://reader034.vdocuments.mx/reader034/viewer/2022051611/54b552d14a7959b92c8b4668/html5/thumbnails/15.jpg)
Unit Tests with
Dependency injec:on
Roboguice
Robolectric
jUnit
DI
Mocks
Android Shadows
@Test
![Page 16: Test pyramid in an Android Agile Project - TDC2013](https://reader034.vdocuments.mx/reader034/viewer/2022051611/54b552d14a7959b92c8b4668/html5/thumbnails/16.jpg)
Func:onal Test
• UI testing [with full stack]
• Tests user flow
• BDD, ATDD
• Feedback after a coffee
business likes that ;)
sounds perfect
*not a strict defini:on
![Page 17: Test pyramid in an Android Agile Project - TDC2013](https://reader034.vdocuments.mx/reader034/viewer/2022051611/54b552d14a7959b92c8b4668/html5/thumbnails/17.jpg)
Cucumber
Honeydew
wraps UIAutomator
step definitions in Ruby
+ =]
☺
github.com/amplify-‐educa:on/honeydew
![Page 18: Test pyramid in an Android Agile Project - TDC2013](https://reader034.vdocuments.mx/reader034/viewer/2022051611/54b552d14a7959b92c8b4668/html5/thumbnails/18.jpg)
Cucumber feature file
![Page 19: Test pyramid in an Android Agile Project - TDC2013](https://reader034.vdocuments.mx/reader034/viewer/2022051611/54b552d14a7959b92c8b4668/html5/thumbnails/19.jpg)
Honeydew steps
![Page 20: Test pyramid in an Android Agile Project - TDC2013](https://reader034.vdocuments.mx/reader034/viewer/2022051611/54b552d14a7959b92c8b4668/html5/thumbnails/20.jpg)
why cucumber? https://speakerdeck.com/nicholaspufal/why-bdd-is-misunderstood
![Page 21: Test pyramid in an Android Agile Project - TDC2013](https://reader034.vdocuments.mx/reader034/viewer/2022051611/54b552d14a7959b92c8b4668/html5/thumbnails/21.jpg)
Cool.. write as much user-‐like tests as you can.. PERFECT!! [ ]
![Page 22: Test pyramid in an Android Agile Project - TDC2013](https://reader034.vdocuments.mx/reader034/viewer/2022051611/54b552d14a7959b92c8b4668/html5/thumbnails/22.jpg)
Unit tests results history
![Page 23: Test pyramid in an Android Agile Project - TDC2013](https://reader034.vdocuments.mx/reader034/viewer/2022051611/54b552d14a7959b92c8b4668/html5/thumbnails/23.jpg)
UI test results history (1)
![Page 24: Test pyramid in an Android Agile Project - TDC2013](https://reader034.vdocuments.mx/reader034/viewer/2022051611/54b552d14a7959b92c8b4668/html5/thumbnails/24.jpg)
UI test results history (2)
![Page 25: Test pyramid in an Android Agile Project - TDC2013](https://reader034.vdocuments.mx/reader034/viewer/2022051611/54b552d14a7959b92c8b4668/html5/thumbnails/25.jpg)
Flaky
Slow
Costy
![Page 26: Test pyramid in an Android Agile Project - TDC2013](https://reader034.vdocuments.mx/reader034/viewer/2022051611/54b552d14a7959b92c8b4668/html5/thumbnails/26.jpg)
Feedback
![Page 27: Test pyramid in an Android Agile Project - TDC2013](https://reader034.vdocuments.mx/reader034/viewer/2022051611/54b552d14a7959b92c8b4668/html5/thumbnails/27.jpg)
the build keeper
![Page 28: Test pyramid in an Android Agile Project - TDC2013](https://reader034.vdocuments.mx/reader034/viewer/2022051611/54b552d14a7959b92c8b4668/html5/thumbnails/28.jpg)
![Page 29: Test pyramid in an Android Agile Project - TDC2013](https://reader034.vdocuments.mx/reader034/viewer/2022051611/54b552d14a7959b92c8b4668/html5/thumbnails/29.jpg)
some UI tests
![Page 30: Test pyramid in an Android Agile Project - TDC2013](https://reader034.vdocuments.mx/reader034/viewer/2022051611/54b552d14a7959b92c8b4668/html5/thumbnails/30.jpg)
Where are you?
h6p://www.mountaingoatsoXware.com/blog/the-‐forgo6en-‐layer-‐of-‐the-‐test-‐automa:on-‐pyramid
![Page 31: Test pyramid in an Android Agile Project - TDC2013](https://reader034.vdocuments.mx/reader034/viewer/2022051611/54b552d14a7959b92c8b4668/html5/thumbnails/31.jpg)
h6p://fabiopereira.me/blog/2012/03/18/introducing-‐depth-‐of-‐test-‐dot/
![Page 32: Test pyramid in an Android Agile Project - TDC2013](https://reader034.vdocuments.mx/reader034/viewer/2022051611/54b552d14a7959b92c8b4668/html5/thumbnails/32.jpg)
external services
backend
libs
![Page 33: Test pyramid in an Android Agile Project - TDC2013](https://reader034.vdocuments.mx/reader034/viewer/2022051611/54b552d14a7959b92c8b4668/html5/thumbnails/33.jpg)
API contracts validaJon
PACTO
h6ps://github.com/thoughtworks/pacto h6ps://speakerdeck.com/marcosccm/evoluindo-‐ecossistemas-‐com-‐consumer-‐driven-‐contracts
![Page 34: Test pyramid in an Android Agile Project - TDC2013](https://reader034.vdocuments.mx/reader034/viewer/2022051611/54b552d14a7959b92c8b4668/html5/thumbnails/34.jpg)
Annnnd.. the manual tests? [ ]
![Page 35: Test pyramid in an Android Agile Project - TDC2013](https://reader034.vdocuments.mx/reader034/viewer/2022051611/54b552d14a7959b92c8b4668/html5/thumbnails/35.jpg)
![Page 36: Test pyramid in an Android Agile Project - TDC2013](https://reader034.vdocuments.mx/reader034/viewer/2022051611/54b552d14a7959b92c8b4668/html5/thumbnails/36.jpg)
http://blog.kalistick.com/Agile/harden-testing-pyramid/
![Page 37: Test pyramid in an Android Agile Project - TDC2013](https://reader034.vdocuments.mx/reader034/viewer/2022051611/54b552d14a7959b92c8b4668/html5/thumbnails/37.jpg)
http://lisacrispin.com/2011/11/08/using-the-agile-testing-quadrants/
![Page 38: Test pyramid in an Android Agile Project - TDC2013](https://reader034.vdocuments.mx/reader034/viewer/2022051611/54b552d14a7959b92c8b4668/html5/thumbnails/38.jpg)
![Page 39: Test pyramid in an Android Agile Project - TDC2013](https://reader034.vdocuments.mx/reader034/viewer/2022051611/54b552d14a7959b92c8b4668/html5/thumbnails/39.jpg)
Feedback
![Page 40: Test pyramid in an Android Agile Project - TDC2013](https://reader034.vdocuments.mx/reader034/viewer/2022051611/54b552d14a7959b92c8b4668/html5/thumbnails/40.jpg)
Thank you! ;)
PORTELA @rafaelportela [email protected] GHISI @thiagoghisi [email protected]
Questions? Feedback?
A beer?