Shazam is a very popular audio recognition app. It is installed on 100M+ Android devices and it’s growing rapidly. In this talk, we will address how we made the release schedule faster, more predictable and with more features by using BDD and automation testing.
I'd like to demonstrate how that can be done without slowing down or hindering the development process and why our developers actually find writing tests is fun. Finally, we’ll look at how our testing strategy has translated to our testing framework and hardware infrastructure.
28. Model
public
interface
VenueRetriever
{
void
findClosestVenue(VenueFoundCallback
callback);
}
public
class
NetworkVenueRetriever
implements
VenueRetriever
{
public
void
findClosestVenue(VenueFoundCallback
callback)
{
//
Some
slow
networking
}
}
public
class
LocalVenueRetriever
implements
VenueRetriever
{
public
void
findClosestVenue(VenueFoundCallback
callback)
{
//
DB
look-‐up
/
caching
layer,
perhaps?
}
}
29. Activity
public
class
ResultActivity
extends
Activity
implements
ResultView
{
private
final
VenueRetriever
venueRetriever
=
venueRetriever();
private
ResultPresenter
resultPresenter;
public
void
onCreate(Bundle
savedInstanceState)
{
//
TODO:
Setup
layouts
&
views
Result
result
=
resultToDisplay();
resultPresenter
=
new
ResultPresenter(this,
venueRetriever,
result);
}
public
void
onStart()
{
resultPresenter.startPresenting();
}
}
30. Presenter
public
class
ResultPresenter
{
public
ResultPresenter(ResultView
resultView,
VenueRetriever
venueRetriever,
Result
res){
this.resultView
=
resultView;
this.venueRetriever
=
venueRetriever;
this.result
=
res;
}
public
void
startPresenting()
{
resultView.showResult(result);
venueRetriever.findClosestVenue(new
VenueFoundCallback()
{
public
void
venueFound(Venue
venue)
{
resultView.showCheckInPrompt(venue);
}
});
}
}
32. Activity as View
public
class
ResultActivity
extends
Activity
implements
ResultView
{
@Override
public
void
showResult(Result
result)
{
//TODO
show
the
result
screen
&
bind
result
data
}
@Override
public
void
showCheckInPrompt(Venue
venue)
{
//TODO
bind
the
venue
with
check-‐in
prompt
view
}
}
33. Other Unit Test technologies
• JUnit 4
• Robolectric
java.lang.RuntimeException: Stub!
• Hamcrest
• JMock