测试列表首选项

时间:2018-11-13 13:30:52

标签: android android-espresso android-testing

我正在尝试测试android偏好设置,但对于如何获得该结果我有些困惑。

这是我的偏好

<PreferenceScreen 
xmlns:android="http://schemas.android.com/apk/res/android">
<ListPreference
    android:id="@+id/numberListPreference"
    android:defaultValue="3"
    android:entries="@array/number_text"
    android:entryValues="@array/number_value"
    android:key="@string/pref_key"
    android:summary="@string/pref_summary"
    android:title="@string/pref_title" />
</PreferenceScreen>

我想测试一下,当我更改显示的ListPreference中的数字时,SharedPreference实际上是否已更改。

现在,代码可以正常工作了,我只是在测试部分进行拦截。

这是我活动的一部分:

public class SettingActivity extends AppCompatActivity implements
SharedPreferences.OnSharedPreferenceChangeListener {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getFragmentManager()
            .beginTransaction()
            .replace(android.R.id.content, new SettingsFragment())
            .commit();
    }

    public static class SettingsFragment extends PreferenceFragment {
        @Override
        public void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.preferences);
        }
    }
}

问题是我遇到经典的“如果目标视图不属于视图层次结构”错误。

欢迎任何帮助。 谢谢!

1 个答案:

答案 0 :(得分:2)

@Test
    public void clickListPreference() throws Exception{

        // Check if it is displayed
        Context appContext = InstrumentationRegistry.getTargetContext();

        onData(allOf(
           is(instanceOf(Preference.class)),
           withKey(appContext.getResources().getString(R.string.pref_key))))
          .check(matches(isDisplayed()));

        // Check if click is working
        onData(allOf(
           is(instanceOf(Preference.class)),
           withKey(appContext.getResources().getString(R.string.pref_key))))           
          .onChildView(withText(appContext.getResources()
              .getString(R.string.pref_title))).perform(click());
 }

希望这会帮助您...将您的共享首选项置于点击操作下