I have a custom application called MainApplication. The activity I am testing references the application context. The code looks like this:
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mAppContext = (MainApplication) getApplicationContext();
....
}
I am using RoboGuice 2.0 and Robolectric 2.2. Now whenever I test the activity, like
@RunWith(RobolectricTestRunner.class)
public class DetailActivityTests {
protected MainApplication application = mock(MainApplication.class, RETURNS_DEEP_STUBS);
protected Context context = mock(RoboActivity.class, RETURNS_DEEP_STUBS);
@Before
public void setup() {
when(context.getApplicationContext()).thenReturn(application);
when(application.getApplicationContext()).thenReturn(application);
}
@Test
public void testActivity() {
Activity activity = Robolectric.buildActivity(DetailActivity.class).create().get();
....
}
}
I get an the casting issue:
android.app.Application cannot be cast to com.xxx.xxx.xxx.MainApplication
[junit] java.lang.ClassCastException: android.app.Application cannot be cast to com.xxx.xxx.xxx.MainApplication
[junit] at com.xxx.xxx.xxx.activity.DetailActivity.onCreate(DetailActivity.java:52)
[junit] at android.app.Activity.performCreate(Activity.java:5008)
[junit] at org.fest.reflect.method.Invoker.invoke(Invoker.java:112)
[junit] at org.robolectric.util.ActivityController$1.run(ActivityController.java:116)
[junit] at org.robolectric.shadows.ShadowLooper.runPaused(ShadowLooper.java:256)
[junit] at org.robolectric.util.ActivityController.create(ActivityController.java:111)
[junit] at org.robolectric.util.ActivityController.create(ActivityController.java:123)
[junit] at com.xxx.xxx.xxx.activity.GlanceActivityTests.testActivity(DetailActivityTests.java:33)
[junit] at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:234)
[junit] at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.java:175)
How can i fix this?