Robolectric Survival Guide
May 10, 2015
Robolectric Survival Guide
ANDROID PRODUCTS HISTORY
• 2009 Chat (IM)• 2011 XMS• 2012 We started with Robolectric
eBuddy
Android!
Relationships
• Java• Maven• Android• Unit tests
First Android JUnit Test import org.junit.Before; import org.junit.Test; import static org.fest.assertions.api.Assertions.assertThat;
public class MainActivityTest { private MainActivity activity;
@Before public void setUp () throws Exception { activity = new MainActivity(); activity.onCreate( null ); }
@Test public void checkInitialTexts () throws Exception { assertThat( activity.downloadButton.getText() ).isEqualTo( "Download" ); } }
First Android JUnit Test
Android Testing Options
• No tests• POJO• Instrumental tests• Android sources• Mock Android• Robolectric!
What is inside
• Parses resources• Intercepts loading Android
classes • Rewrites method bodies
with Javassist• Binds shadow objects to
new Android objects• Proxies modified objects
First Robolectric Test
Key Points from Demo #1
• Correct path to SDK in the local.properties
• JUnit dependency before Android (IntelliJ IDEA)
• @RunWith(
RobolectricTestRunner.class)
Biggest Issue of Robolectric
• Lack of documentation • Not many examples• Unscheduled releases• http://robolectric.blogspot.nl/
2011/02/how-to-work-on-robolectric-in-parallel.html
Robolectric Drawbacks
• Sometimes magic • PowerMock integration• Time of run for the first test
Shadowing
• http://robolectric.blogspot.nl/2011/01/how-to-create-your-own-shadow-classes.html
• Bind shadow class• Use own Runner instead of
Robolectric• (Submit pull request)
Dependency Injection
RoboGuice 2.0
public class MainActivity extends RoboActivity implements View.OnClickListener { @Inject Bus bus;
@Override public void onCreate( Bundle savedInstanceState ) { bus.register( this ); }
@Override public void onClick( View view ) { bus.post( new DownloadDataEvent( urlInput.getText().toString() ) ); } }
RoboGuice 2.0
Key Points from Demo #2
• InjectingTestRunner• Own AbstractModule
implementation• Run injections before
every test method
Android Real Jar (Robolectric 2.0)
• http://robolectric.blogspot.nl/2011/08/using-robolectric-with-real-android.html
• Robolectric 2.0 alpha
Robolectric or not Robolectric
• Not a question for me• Follow industry
Thank you!