测试列表首选项

jer*_*myb 1 android android-testing android-espresso

我正在尝试测试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>
Run Code Online (Sandbox Code Playgroud)

我想测试一下,当我更改显示的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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

欢迎任何帮助。谢谢 !

小智 6

@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());
 }
Run Code Online (Sandbox Code Playgroud)

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