测试自定义应用程序中的活动

时间:2014-03-03 18:02:20

标签: android unit-testing robolectric roboguice

我有一个名为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)

我该如何解决这个问题?

0 个答案:

没有答案