robolectric adventure

20
Robolectric Survival Guide

Upload: eugen-martynov

Post on 10-May-2015

1.263 views

Category:

Documents


1 download

DESCRIPTION

My Robolectric overview done on Android meet-up hosted by Xebia The final code from the presentation with additional examples will be here: https://github.com/emartynov/robolectric-presentation

TRANSCRIPT

Page 1: Robolectric Adventure

Robolectric Survival Guide

Page 2: Robolectric Adventure

ANDROID PRODUCTS HISTORY

• 2009 Chat (IM)• 2011 XMS• 2012 We started with Robolectric

eBuddy

Page 3: Robolectric Adventure

Android!

Page 4: Robolectric Adventure

Relationships

• Java• Maven• Android• Unit tests

Page 5: Robolectric Adventure

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" ); } }

Page 6: Robolectric Adventure

First Android JUnit Test

Page 7: Robolectric Adventure

Android Testing Options

• No tests• POJO• Instrumental tests• Android sources• Mock Android• Robolectric!

Page 8: Robolectric Adventure

What is inside

• Parses resources• Intercepts loading Android

classes • Rewrites method bodies

with Javassist• Binds shadow objects to

new Android objects• Proxies modified objects

Page 9: Robolectric Adventure

First Robolectric Test

Page 10: Robolectric Adventure

Key Points from Demo #1

• Correct path to SDK in the local.properties

• JUnit dependency before Android (IntelliJ IDEA)

• @RunWith(

RobolectricTestRunner.class)

Page 12: Robolectric Adventure

Robolectric Drawbacks

• Sometimes magic • PowerMock integration• Time of run for the first test

Page 14: Robolectric Adventure

Dependency Injection

Page 15: Robolectric Adventure

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() ) ); } }

Page 16: Robolectric Adventure

RoboGuice 2.0

Page 17: Robolectric Adventure

Key Points from Demo #2

• InjectingTestRunner• Own AbstractModule

implementation• Run injections before

every test method

Page 19: Robolectric Adventure

Robolectric or not Robolectric

• Not a question for me• Follow industry

Page 20: Robolectric Adventure

Thank you!