Today we have a variety of automated testing tools available for Android including JUnit, Mockito, Robolectric, Espresso, UI Automator and more.
But how can we design our applications to leverage each tool most effectively and at the same time ensure our code is readable, flexible, and maintainable?