2011-05-05 3 views
0

카운터가 원래 값을 유지하는지 (재시작시 잘못 증가하기 전에) 파괴/재시작 순서를 테스트하고 있습니다. 나는 수동으로 테스트 할 때 픽스를 넣었다. 그러나 픽스를 포함하든하지 않든 단위 테스트는 항상 통과합니다. 아래의 코드에서 볼 수 있듯이 카운터 값을 얻은 다음 다시 시작하여 카운터 값을 다시 가져 와서 비교합니다. 무엇이 문제 일 수 있습니까?Android : 유닛 테스트 실패 방법

public void testNumCorrectEqualAfterDestroy() { 

mCorrect = (TextView) mActivity.findViewById(R.id.correct); 

    int before = Integer.parseInt(mCorrect.getText().toString()); 
    mActivity.finish(); 
    mActivity = this.getActivity(); 

mCorrect = (TextView) mActivity.findViewById(R.id.correct); 

    int after = Integer.parseInt(mCorrect.getText().toString()); 

    Assert.assertEquals(before, after); 

    } 
+0

어설 션을 추가하십시오. 참 (거짓); 거기서 테스트가 실행되고 있는지 확인하십시오. 이 테스트는 실행되는 다른 테스트와 동일한 클래스에 있습니까? – Dan

+0

확실히 달리고 있습니다. 실행되는 테스트 목록에 표시되며 debug 문 (여기에 포함되지 않음)은 콘솔에 인쇄됩니다. 확실하게, 나는 assertTrue (false)를 추가했고, 실패했다. –

+0

** mCorrect **의 기본값은 어떻게 설정합니까? 이 경우, ** ** ** ** ** ** 이전의 ** **는 동일한 값을 가지며, 매번 통과하는 테스트를 설명하는 기본값 인 것으로 보입니다. – dmon

답변

1

finish()는 "적절한"상태를 통해 활동을 순환시키지 않을 것이라고 생각합니다. 내가 전에이 라이프 사이클 케이스를 테스트 한 방법은 지금과 같다 :

... 
//TODO: do not use getActivity, instead use the startActivity() method 
//and pass a value in the Bundle parameter 
... 
getInstrumentation().callActivityOnStart(mActivity); 
getInstrumentation().callActivityOnResume(mActivity); 
//TODO: asssert that the value is the expected one (based on what you fed in the bundle) 
Bundle newBundle = new Bundle(); 
getInstrumentation().callActivityOnSaveInstanceState(mActivity, newBundle); 
getInstrumentation().callActivityOnPause(mActivity); 
getInstrumentation().callActivityOnStop(mActivity); 
getInstrumentation().callActivityOnDestroy(mActivity); 

//initialize activity with the saved bundle 
getInstrumentation().callActivityOnCreate(mActivity, newBundle); 
getInstrumentation().callActivityOnResume(mActivity); 

//TODO: assert that the value is the expected one 
+0

감사합니다. 훌륭한 답변입니다. 한 노트는 UI 스레드에서 실행해야하므로이 주석을 추가했습니다. @UiThreadTest –

0

ActivityInstrumentationTestCase2.getActivity()는 활동을 당신이 전화를 처음 시작하고 단순히 테스트 케이스의 각 후속 호출에 그 활동를 반환합니다. 따라서, 당신은 여전히 ​​당신이 끝낸 활동을보고 있습니다.

첫 번째 활동을 마친 후에는 테스트에서 새 활동을 시작해야합니다. 예를 들어 InstrumentationTestCase.launchActivity()을 사용할 수 있습니다.

는 또 다른 예로서, 나는에 대한-결과 ActivityB를 시작 ActivityA에서 버튼을 밀어 테스트를 작성했습니다; 그런 다음 테스트는 즉시 ActivityA를 종료하지만 방향 변경을 통해 finish()도 작동합니다.) 그런 다음 ActivityB가 완료되면 시스템이 작성한 새 ActivityA에 대한 핸들을 가져 와서 결과를 보냅니다. 그 트릭은 Instrumentation.ActivityMonitor를 추가 한 다음 시스템이 새로운 ActivityA를 시작하고 테스트에 핸들을 제공 할 때까지 모니터를 기다리게합니다.