1

Expresso로 코드를 테스트하는 데 문제가 있습니다. 이 코드를 썼다 :Android 테스팅 기본 설정 조각 by 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()));