Amplify - TDD on Android with Robolectric

20
The Magic of Android Unit Testing Johny Urgiles

description

Quick introduction to TDD on Android using Robolectric.

Transcript of Amplify - TDD on Android with Robolectric

Page 1: Amplify - TDD on Android with Robolectric

The Magic of Android Unit TestingJohny Urgiles

Page 2: Amplify - TDD on Android with Robolectric

Johny Urgiles

● 3 years @ Amplify ● Android dev for half of that● Code quality aficionado● The Lab for Robotics Education

Page 3: Amplify - TDD on Android with Robolectric
Page 4: Amplify - TDD on Android with Robolectric

Amplify & Test Driven Development

● Write test first ● See it fail● Write simplest possible solution● Refactor● Sleep peacefully at night

Page 5: Amplify - TDD on Android with Robolectric

Finished Product

Page 6: Amplify - TDD on Android with Robolectric

Slow & Careful

Page 7: Amplify - TDD on Android with Robolectric

Slow & Careful

Page 8: Amplify - TDD on Android with Robolectric

Slow & Careful

Fast & Risky

Page 9: Amplify - TDD on Android with Robolectric

Slow & Careful

Fast & Risky

Page 10: Amplify - TDD on Android with Robolectric
Page 11: Amplify - TDD on Android with Robolectric

Android & TDD

● Android Instrumentation Unit Testing○ Pretty slow by unit test standards○ We still have to maintain a

separate infrastructure for tablet <-> tablet interaction

Page 12: Amplify - TDD on Android with Robolectric

Android on JUnit

Page 13: Amplify - TDD on Android with Robolectric

Stubbin

Page 14: Amplify - TDD on Android with Robolectric

It’s Raining Runtime Exceptions

Page 15: Amplify - TDD on Android with Robolectric

Robolectric 2.0

JVM

Robolectric

JUnit Test

Page 16: Amplify - TDD on Android with Robolectric
Page 17: Amplify - TDD on Android with Robolectric

Robolectric

● Mimics Android functionality● 2.0 includes Android code (4.2.1 rc1)● Provides view into Android internals● Extendable with ‘Shadows’

Page 18: Amplify - TDD on Android with Robolectric

Robolectric @ Amplify

● 4500 unit tests across our Android Apps● Most in a single repo: 3751

○ Runs in 6.5 minutes (Macbook Pro)○ Migration to Robolectric 2.0 took a part-time dev

about 3 weeks○ Worth it

● Devs run unit tests in IntelliJ

Page 19: Amplify - TDD on Android with Robolectric

Code Time

Page 20: Amplify - TDD on Android with Robolectric

More Unit Testing @ Amplify

● RoboGuice○ Based on Google Guice○ Dependency injection for Android

● Mockito○ Standard Java Mock library

● Android FEST ○ Assertion library by Square