2014-04-09 5 views
0

ListViewTextView이 포함 된 간단한 Activity을 작성했습니다. ListView 항목을 선택하면 TextView에 항목 텍스트가 반영됩니다. 회전 변경을 처리하기위한 코드를 추가하지 않았습니다. 나는 응용 프로그램을 실행하면, 내가 기대 무엇을 얻을 :테스트 케이스에 오래된 TextView 값이 표시됨 : Android의 방향 변경 테스트

  • 클릭 된 항목은 그러나 TextView
  • 포스트 회전, TextView의 기본 값이 표시됩니다

에 표시됩니다, 내 테스트를 실행 한 후 (ActivityInstrumentationTestCase2 연장)이 발생하는 것입니다 : 클릭 항목의

  • 값은 제대로 내 시험에 기록
  • 포스트 회전, 테스트는 TextView의 예전 값을 얻을 수
  • 여기

내 시험이다 (I 텍스트 내 장치에서 변경된 것을 볼 수 있지만를!) : 일부 SO에

@Override 
protected void setUp() throws Exception { 
    super.setUp(); 
    mActivity=(MainActivity) getActivity(); 
    lv=(ListView) mActivity.findViewById(com.example.samplee.R.id.lv1); 
    } 

public void testDestroy() { 
    mActivity.runOnUiThread(new Runnable() { 

     @Override 
     public void run() { 
      lv.requestFocus(); 
      lv.setSelection(0); 
     } 
    }); 
    this.sendKeys(KeyEvent.KEYCODE_DPAD_DOWN); 
    this.sendKeys(KeyEvent.KEYCODE_DPAD_DOWN); 
    //select 2nd item in ListView 
    this.sendKeys(KeyEvent.KEYCODE_DPAD_CENTER); 
    TextView tv=(TextView)mActivity.findViewById(com.example.samplee.R.id.textView1); 
    try { 
     Thread.sleep(1000); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
    String origValue=(String) tv.getText(); 
    mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
    try { 
     Thread.sleep(1000); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
    tv=(TextView)mActivity.findViewById(com.example.samplee.R.id.textView1); 
    String newValue=(String) tv.getText(); //gets same value as origValue! 
    assertEquals(origValue,newValue); //always succeds; 
} 

게시물, 내 Thread.sleep() 코드 대신 getInstrumentation().waitForIdleSync()을 사용하는 방법에 대해 읽었습니다. 그것도 작동하지 않았습니다.

로보 티움도 사용해 보았습니다. 변경 없음! 이 문제를 해결하는 방법에 대한 지침이 있습니까?

답변

1

새로운 활동이 추가되었습니다. mActivity.findViewById (...)를 solo.getCurrentActivity(). findViewById (...)로 바꿔보십시오.

+1

완벽! 'Solo'와'getCurrentActivity()'를 사용해야했습니다. 'ActivityInstrumentationTestCase2'를 통해이를 해결할 수 없습니다. –