我试图测试使用两个不同PreferenceFragments的PreferenceActivity。我用一个Intent开始Activity:
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());
但那只是失败。
代码在我的应用程序中完美运行,并创建并添加了正确的片段。
答案 0 :(得分:0)
我不太了解偏好,但我做了一般的片段测试。 我认为在构建活动时需要add a call to ActivityController.visible()才能创建片段。我还发现你需要注意创建后可见调用的顺序。在我的测试中,我创建然后可见然后开始,但看看什么对你有用。 e.g:
activity = Robolectric.buildActivity(YourActivity.class).create(bundle).visible().start().resume().get();
另请注意,不推荐使用getPreferencesScreen。所以你应该使用标准的android方法之一findFragmentBy [Id | Tag]来获取片段。 e.g:
Fragment f = activity.getSupportFragmentManager().findFragmentById(R.id.your_id);