How ANDROID TESTING
changed how we think about
death…
@fernando_cejas
Code samples:
https://github.com/android10/Inside_Android_Testing
https://github.com/android10/AndroidApplicationTestingSample
Second Edition
android10.org
Who am I… •  Software Engineer
•  GDG Barcelona Organizer
android10.org
•  Android lover
•  Geek
•  Gintonic fan…
Agenda?
Why testing..WTF?
•  Testing increases the level of confidence in
your code.
•  Testing makes it possible to write new code,
and refactor existing code, without worrying
that you’ve broken existing functionality.
•  Unit testing
•  Integration Testing
•  Functional and System Testing
1.  Stress Testing
2.  Performance Testing
3.  Usability Testing
•  Acceptance Testing
•  Regression Testing
1.  Smoke Testing
Types of tests…
Martin Fowler:
"...test-doubles ... preprogrammed with
expectation"
What is this mock thing?
Mockito is a mocking framework that tastes
really good.
Mockito doesn't give you
hangover because the tests
are very readable and they
produce clean verification
errors.
GIVE A WARM
WELCOME TO…
mockito
Mockito
Build-operate-check pattern
Mock initizalition
Initizalition using mockito test runner
Let’s verify some behaviour
Argument matchers
Verifying number of invocations / at
least x / never
Making sure interaction(s) never
happened on mock
Spying on real objects
Sounds familiar???
Allows you to run your android
code on JVM.
Allows loading of Android
Classes in pure Java
Projects.
TO THE RESCUE…
Shadow Objects!
View and Resource Loading…
Shadow Activity
Shadow ImageView
•  Uses real Android SDK code
•  Styles and themes supported
•  System resources are available
•  Performance improved
•  Bugs fixed
Robolectric 2.0+
Perform click Sample
Started Activity test
Should have fragment test
Device Configuration Sample
Network sample
Robolectric acts as a proxy!!!
Creating your own shadows
Creating your own shadows
Creating your own shadows
•  A library by square (FTW!)
•  It gives a chainable (or “fluent”)
syntax for checking assertions.
•  Makes tests easier to write (and
read!).
FEST Android
Sample: code to modify a bitmap
Assertions with FEST
Dependency injection is a software design
pattern that allows the removal of hard-coded
dependencies and makes it possible to change
them, whether at run-time or compile-time
Dependency what?
Dagger
Directed
Acyclic
Graph
Dagger Graph sample
Dagger sample
Declare dependencies
Satisfy dependencies
Build the graph
Modules
Spoon
•  Acceptance tests (black box)
•  Automation of test execution across multiple
devices
•  Aggregation of the results
Spoon
•  Aggregation of screenshots while your tests
are running
•  Robojuice
•  Robotium
•  Android Testing Framework
•  UI Automator
•  Monkey Runner
•  Espresso
•  Calabash
More tools…
WRITE TESTS!!!
•  Simplify your architecture
•  Have a robust testing strategy
•  Use continuous integration tools
•  Mock/stub functionality
•  Create your own test runner
Best practices and some advice…
DO NOT LET YOUR CODE TO BE BROKEN…
DO NOT BREAK EXISTING FUNCTIONLITY…
Questions?
@fernando_cejas
https://github.com/android10
http://android10.org
THANKS!!!

How ANDROID TESTING changed how we think about Death - Second Edition