1

Expressoでコードをテストする際に問題が発生しました。私はこのコードを書いた:Androidテストの設定をExpressoで行う

public class SettingsActivity extends Activity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    getFragmentManager().beginTransaction() 
      .replace(android.R.id.content, new SettingsFragment()) 
      .commit(); 
} 


public class SettingsFragment extends PreferenceFragment { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    addPreferencesFromResource(R.xml.preferences); 
} 

XML:

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/preferences_xml"> 
<PreferenceCategory 
    android:title="@string/application_settings" 
    android:id="@+id/application_settings_preferences"> 

<CheckBoxPreference 
    android:key="@string/key_processing_private_data_preference" 
    android:title="@string/title_processing_private_data_preference" 
    android:summary="@string/summary_processing_private_data_preference" 
    android:defaultValue="true" 
    android:dependency="@string/key_recording_audio_preference" 
    android:id="@+id/private_data_check_box_preference"/> 
</PreferenceCategory> 

<PreferenceCategory 
    android:title="@string/device_settings" 
    android:id="@+id/device_settings_preferences"> 

<CheckBoxPreference 
    android:key="@string/key_recording_audio_preference" 
    android:title="@string/title_recording_audio_preference" 
    android:summary="@string/summary_recording_audio_preference" 
    android:defaultValue="true" 
    android:id="@+id/recording_audio_check_box_preference"/> 

    </PreferenceCategory> 
</PreferenceScreen> 

私のテストルール:私はテスト最初のチェックボックスを試してみてください

@Rule 
public ActivityTestRule<SettingsActivity> mActivityRule = new ActivityTestRule<>(
     SettingsActivity.class); 

onData(anything()) 
      .inAdapterView(allOf(
        isDescendantOfA(withId(R.id.preferences_xml)), 
        withId(R.id.application_settings_preferences))) 
      .atPosition(1) 
      .check(matches(isDisplayed())); 

テストは常にNoMatchingViewExceptionで失敗:階層構造のビューがありませんDマッチング:

http://prntscr.com/bv8xlb

そしてまた、私は試してみてください。

String workingInBackgroundSummary = mActivityRule.getActivity().getBaseContext().getString(R.string.summary_working_in_background_preference); 
    onData(withSummaryText(workingInBackgroundSummary)).check(matches(isDisplayed())); 

テストは常にNullPointerExceptionで失敗:

http://prntscr.com/bv8w04

onView(withId(R.id.working_in_background_check_box_preference)).check(matches(isDisplayed())); 

また、NoMatchingViewExceptionで失敗します。

誰かが正しいテストケースの例を示しますか?

答えて

3

(OPの代わりに掲示)

は解決:

onData(allOf(
      is(instanceOf(Preference.class)), 
      withKey(key), 
      withSummary(R.string.summary_working_in_background_preference), 
      withTitle(R.string.title_working_in_background_preference))) 
      .onChildView(withText(title)) 
      .check(matches(isCompletelyDisplayed())); 
関連する問題