我有一个名为MainApplication的自定义应用程序。我正在测试的活动引用了应用程序上下文。代码如下所示:
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mAppContext = (MainApplication) getApplicationContext();
....
}
我正在使用RoboGuice 2.0和Robolectric 2.2。现在每当我测试活动时,比如
@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();
....
}
}
我遇到了投射问题:
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)
我该如何解决这个问题?