如何使用Robolectric测试PreferenceFragment

6

我正在尝试测试使用两个不同的PreferenceFragments的PreferenceActivity。 我使用以下意图启动活动:

public static Intent getActivityIntent(Context context, Mode mode){
    Intent intent = new Intent(context, MyPreferencesActivity.class);
    intent.putExtra( PreferenceActivity.EXTRA_SHOW_FRAGMENT, getMainFragmentName(mode));
    intent.putExtra( PreferenceActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS, getMainFragmentArguments(mode));
    intent.putExtra( PreferenceActivity.EXTRA_NO_HEADERS, true );
    return intent;
}

getMainFragmentName和getMainFragmentArguments根据模式返回不同的片段和参数。

现在,我的问题是当我像下面这样使用robolectric启动活动时:

Robolectric.buildActivity(MyPreferencesActivity.class)
            .withIntent(MyPreferencesActivity.getActivityIntent(Robolectric.application,
                    MyPreferencesActivity.Mode.FULL))
            .attach()
            .create()
            .postCreate(null)
            .start()
            .resume()
            .get();

我不知道如何确保正确的片段已经创建。当我调试代码时,似乎没有创建任何片段。上面的代码不应该足以创建片段吗?

我尝试使用PreferenceActivity的阴影并进行了测试:

assertNotNull(shadowPreferenceActivity.getPreferencesScreen());

但是它失败了。

这段代码在我的应用程序中完美运行,正确的片段被创建并添加。

1个回答

0

我不知道具体的偏好设置,但我已经完成了一般的片段测试。 我认为在构建活动时,您需要添加对ActivityController.visible()的调用,以便它创建片段。我还发现,在调用create之后调用visible的顺序需要小心。在我的测试中,我先创建,然后可见,最后启动,但请看看哪种方式适合您。例如:

activity = Robolectric.buildActivity(YourActivity.class).create(bundle).visible().start().resume().get();

请注意,getPreferencesScreen已被弃用。因此,您应该使用标准的Android方法之一findFragmentBy[Id|Tag]来获取片段。例如:
Fragment f = activity.getSupportFragmentManager().findFragmentById(R.id.your_id);

对我来说,不幸的是,它没有任何改变 :( - cV2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接