Android活动测试-测试重启



在Android开发人员文档中题为"添加状态管理测试"的"测试基础"one_answers"活动测试"部分中,它建议使用重新启动测试活动

mActivity.finish();
mActivity = this.getActivity();

在上面的两个语句之间添加了sleep之后,我可以看到当执行mActivity=this.getActivity()时,"活动"并没有在屏幕上重新绘制。我的测试似乎有效,但我很好奇为什么"活动"没有在屏幕上重新绘制,因为API文档中似乎没有提到这一点。

如果任何人能对此有所了解,我将不胜感激。在调用finish()方法时,"活动"从屏幕上消失,但在调用this.getActivity()时不会重新出现。我也试过在getActivity()后面放一个mActivity.setVisible(true),但这没有帮助。

我的代码片段现在是:

...
mActivity.finish();
Thread.sleep(5000);
mActivity = this.getActivity();
Thread.sleep(5000);
...

我已经进行了广泛的搜索,但找不到任何解释,解释为什么在调用getActivity()时Activity没有重新出现。

我在安卓2.3.5、2.3.3和2.2.2上测试过,结果都是一样的。

类ActivityInstrumentationTestCase2似乎需要一个额外的finish方法,其中必须进行一些清理。同时,你可以在完成活动后通过清理自己来解决这个问题。因此,更改您的代码如下:

mActivity.finish();
setActivity(null);
mActivity = this.getActivity();

这可以解释如下。类ActivityInstrumentationTestCase2中的方法getActivity调用setActivity(a)

public T getActivity() {
    Activity a = super.getActivity();
    if (a == null) {
        // set initial touch mode
        getInstrumentation().setInTouchMode(mInitialTouchMode);
        final String targetPackage = 
            getInstrumentation().getTargetContext().getPackageName();
        // inject custom intent, if provided
        if (mActivityIntent == null) {
            a = launchActivity(targetPackage, mActivityClass, null);
        } else {
            a = launchActivityWithIntent(targetPackage, 
                                         mActivityClass, 
                                         mActivityIntent);
        }
        setActivity(a);
    }
    return (T) a;
}

方法setActivity设置内部变量mActivityIntent。

public void setActivityIntent(Intent i) {
    mActivityIntent = i;
}

第一次调用之后的所有调用现在都将使用新值mActivityIntent,而不是null值。因此

a = launchActivityWithIntent(targetPackage, mActivityClass, mActivityIntent);

将被调用。可能您的应用程序无法以此目的启动。

请注意,方法rearDown可以进行适当的清理:

protected void tearDown() throws Exception {
    // Finish the Activity off (unless was never launched anyway)
    Activity a = super.getActivity();
    if (a != null) {
        a.finish();
        setActivity(null);
    }
}

最新更新