2014-04-08 4 views
1

그래서 레이블의 값을 설정 한 테스트가 있습니다. 회전 후 라벨이 비어있어 단위 테스트를 만들었습니다. 문제는 레이블이 비어있는 이유를 찾았지만 더 이상 비어 있지 않아도 단위 테스트가 실패한다는 것입니다. 회전 후에 어떤 이유로 ID로 TextView에 액세스 할 수 없게되면 null을 반환합니다.안드로이드 유닛 테스트에서 회전을 찾지 못했습니다.

@MediumTest 
public void testThatLabelsRestoredAfterSwitchingToLandscape(){ 
    getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
    getInstrumentation().waitForIdleSync(); 

    assertThat(textFor(R.id.location), is("Los Angeles")); 

} 

textFor 방법은 단지 널 (null) 검사를 수행하지만 여기있다 :

private String textFor(int id) { 
    TextView text = (TextView) getActivity().findViewById(id); 
    return text != null && text.getText() != null ? text.getText().toString() : null; 
} 

텍스트가 null입니다.

놀라운 것은 아닙니다 : 장치가 가로 모드에 있으면 테스트가 통과됩니다.

또한 회전 후에 테스트에 절전 모드를 삽입 했으므로 대상 값으로 컨트롤을 볼 수 있습니다.

+0

세로 및 가로 레이아웃 리소스 파일이 다를 수 있으며 전환하려는 방향으로 R.id.location이 누락되었을 수 있습니다. 어쩌면 그것을 확인할 수 있을까요? –

+0

아니요, 그들은 동일합니다. 좋아, 그래서 문제를 발견 : 활동이 파괴되고있다 !! 따라서 회전 후 다른 활동입니다. 이것을 알아 내려고 노력 중입니다. 분명히 Robotium 녀석들은 이미 그것을 알아 냈고, 그들의 버전에서 작동하기 때문에 샌드페이퍼를 만들었습니다. – Rob

답변

2

getActivity()가 레이아웃 변경시 파괴 된 Activity에 대한 참조를 반환하는 비슷한 문제가있었습니다. 대신 Robotium solo.getCurrentActivity()를 사용하면 제대로 작동합니다.

+0

당신은 내 생명을 구했어 !!! –