2012-06-28 2 views
2

Robotium을 처음 사용 했으므로 어디서나 포럼에서 이에 대한 답변을 찾을 수 없습니다. PreferenceActivity를 테스트하고 있습니다. 문제는 환경 설정을 클릭해야 할 때마다 단위 테스트가 실패한다는 것입니다.Robotium에서 PreferenceActivity 테스트하기

좀 더 구체적으로 말해서 나는 몇 가지 테스트를 실행하고있는 CheckBoxPreference가 있습니다. CheckBoxPreference가 선택되었을 때 화면에 활성화 된 (회색으로 표시되지 않은) 특정 환경 설정이 있는지 확인하고 그 반대의 경우도 확인합니다. 현재로서는 searchText()/waitForText() 개의 방법 (화면의 첫 번째 환경 설정)을 사용하여 환경 설정을 찾을 수 없습니다. 나는 또한 getView()에서 선호도의보기를 얻은 후에 clickOnView() 방법을 사용해 보았습니다.

내가 지금 할 수있는 최선의 방법은 Android의 setChecked() 메서드를 사용하여 CheckBoxPreference의 상태를 조작하는 것입니다. 나는 이런 식으로 테스트를하고 있다고 가정하고 있지만 이며 가능한 근본적인 것이 있습니다. PreferenceActivity 또한 ListActivity이기 때문에 ListActivity를 테스트 할 때 관련 질문을 검색해 보았습니다.

다음 링크는 PreferenceActivities 및 Robotium을 사용하기에 좋은 시작점입니다.

public void testEnabledChecked() throws Exception { 
    CheckBoxPreference enabled = PrefTestingUtils.getCheckBoxPreference(mSolo, mActivity, 
      (String) getVal("KEY_ENABLED")); 
    EditTextPreference recipient = PrefTestingUtils.getEditTextPreference(mSolo, mActivity, 
      (String) getVal("KEY_RECIPIENT")); 
    EditTextPreference title = PrefTestingUtils.getEditTextPreference(mSolo, mActivity, 
      (String) getVal("KEY_TITLE")); 
    ListPreference interval = PrefTestingUtils.getListPreference(mSolo, mActivity, 
      (String) getVal("KEY_INTERVAL")); 

    // ensures that the preference is unchecked 
    if (!enabled.isChecked()) { 
     Log.d(TAG, "Enabled preference unchecked, clicking on it"); 

     // mSolo.clickOnView(enabled.getView(null, null)); // Attempt #1 
     // mSolo.clickOnText("Enabled"); // Attempt #2 
     // mSolo.clickOnCheckBox(0); // Attempt #3 
     // mSolo.searchText("Enabled"); // cannot find view 
    } 

    assertTrue(enabled.isChecked()); // AssertionFailedError here 
    assertTrue(recipient.isEnabled()); 
    assertTrue(title.isEnabled()); 
    assertTrue(interval.isEnabled()); 
} 

나는 PrefTestingUtils 기능은 실제로 환경에 유효한 참조를 반환하는 것을 확인했다 : 여기

  • http://code.google.com/p/robotium/issues/detail?id=250
  • http://fyrecloud.com/index.php?topic=5.0

    • 내가 함께 일하고 코드입니다. 모든 PrefTestingUtils 함수는 다음과 유사합니다.

      public static CheckBoxPreference getCheckBoxPreference(Solo solo, 
           PreferenceActivity activity, String key) { 
          if (solo == null || activity == null || key == null) { 
           Log.d(TAG, "getCheckBoxPreference::Null parameter"); 
           return null; 
          } 
      
          Preference p = activity.findPreference(key); 
          if (p instanceof CheckBoxPreference) { 
           return (CheckBoxPreference) p; 
          } 
          return null; 
      } 
      

      아무나 도와 줄 수있는 모든 도움을 주시면 감사하겠습니다. 감사!

    +0

    이전에 PreferenceActivity를 성공적으로 테스트했습니다. 너 뭐 해봤 니? 현재 테스트 클래스 코드를 게시해야합니다. 그렇지 않으면 포인터를 제공하기가 어렵습니다. – dmon

    +0

    감사합니다. dmon. 내 코드를 포함하도록 내 게시물을 편집했습니다. – rach5000

    답변

    1

    그래서 여기에 내가 생각해 낸 것이 있습니다. 기본 설정의 제목과 clickOnText() 메소드를 사용하여 환경 설정을 클릭 할 수 있습니다를 사용하여,

    private CheckBoxPreference getCheckBoxPref(String key) { 
        ArrayList<ListView> currentListViews = mSolo.getCurrentListViews(); 
        // get the lone ListAdapter for the PreferenceActivity 
        ListAdapter listAdapter = currentListViews.get(0).getAdapter(); 
    
        int cnt = listAdapter.getCount(); 
        for (int i = 0; i < cnt; i++) { 
         Object o = listAdapter.getItem(i); 
         if (o instanceof CheckBoxPreference) { 
          CheckBoxPreference pref = (CheckBoxPreference) o; 
          if (pref.getTitle().equals(key)) { 
           return pref; 
          } 
         } 
        } 
        return null; 
    } 
    

    다음 :

    먼저 당신은 CheckBoxPreference에 대한 참조를 얻을 필요가있다. 마지막으로, 나는 당신이 잠시 동안 클릭 후 잠을 자야한다는 것을 알았다. 나는 MINI_SLEEP을 250ms로 정의했다.

    public void testCheckBoxEnabled() { 
        CheckBoxPreference pref = getCheckBoxPref("Enabled"); 
        assertNotNull(pref); 
        assertFalse(pref.isChecked()); 
        mSolo.clickOnText("Enabled"); 
        mSolo.sleep(MINI_SLEEP); 
        assertTrue(pref.isChecked()); 
    } 
    

    희망이 있으면 도움이 될 것입니다.

    +1

    나는 바뀌었지만, 변경해야 할 것이 하나있다. getCheckBoxPref (String ** key **)는 getCheckBoxPref (String ** title **)로 바뀌어야한다. –

    +1

    Robotium 4+에서, .getCurrentListViews() .getCurrentViews (ListView.class)' – Mendhak

    관련 문제