簡體   English   中英

如何使用Robolectric測試PreferenceFragment

[英]How to test PreferenceFragment with Robolectric

我試圖測試我的PreferenceActivity使用兩個不同的PreferenceFragments。 我用一個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());

但那只是失敗了。

代碼在我的應用程序中完美運行,並創建並添加了正確的片段。

我不是特別了解偏好,但我做了一般的片段測試。 我認為您需要在構建活動時添加對ActivityController.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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM