assertNotNull(mActivity);
과 같은 몇 가지 간단한 테스트가 있습니다. (M.D.Torres "Android Application Testing Guide"를 읽었습니다.) 테스트중인 활동이 정상적으로 실행됩니다. 모든 단일 테스트는 정상적으로 실행됩니다. 하지만 두 번째 테스트에서 한 번에 여러 테스트를 실행하면 getActivity()
결코 반환되지 않습니다. logcat에 오류가 없습니다 (마지막 행 "시작 의도 ..."). 디버깅이 도움이되지 않습니다. getActivity()
에 들어가면 사용할 수있는 소스 코드가 없다는 오류가 발생합니다.
다른 테스트 프로젝트 - Google의 ActivityTesting이 여러 테스트에서라도 제대로 실행되므로 Eclipse가 올바르게 구성됩니다.
아무도 그런 일이 없었습니까?두 번째 테스트에서는 getActivity()가 반환하지 않습니다
답변
"깨끗한 방"과 같은 테스트 프로젝트를 다시 한 번 만들어서 효과가있었습니다. 그런 다음 두 가지 프로젝트를 비교하고 범인을 찾았습니다. 공백 해임 :
protected void tearDown() throws Exception {
}
제거하면 모든 테스트가 녹색으로 실행됩니다. 다시 붙여 넣으면 두 번째 테스트가 중단됩니다. 이제 설명을 읽고 대답으로 표시 할 준비가되었습니다.
편집 :tearDown
메서드 끝에는 super.tearDown()
을 호출해야합니다. 모든 사람을 불편을 드려 죄송합니다.
ActivityInstrumentationTestCase2를 사용하여 ExoPlayer를 사용하여 활동을 테스트하고 올바른 리소스 정리를 수행했습니다. 클린업 및 최종 검사는 모든 테스트에서 동일하므로 tearDown()을 구현하는 것이 좋습니다. 모든 테스트는 문제없이 별도로 실행되지만 여러 테스트를 실행하면 getActivity()가 반환되지 않는 경우가 있습니다. 내의 tearDown()는 여러 가지 구현 : 활동의
- 체크 상태 (다양한 어설() 호출) 선수의
- 체크 상태 (다양한 어설()를 호출)
- 수동으로 선수 자원을 정리를 (가까운 전화()과 해제())
- setActivity (null가) (이것은 내가 모든 제안 된 해결 방법을 시도
문제)
위의 시나리오에서 이전 테스트의 onDestory()가 다음 테스트의 onCreate()와 겹칠 수 있다는 점을 보여주는 많은 디버깅이있었습니다.
이test1.getActivity();
test1.tearDown() called;
test1.tearDown() over;
test2.getActivity()
test2.onCreate();
test1.onStop(); --> why is this late?
test1.onDestroy(); --> why is this late?
test2.tearDown() called;
test2.tearDown() over;
test3.getActiviy() --> this should call test3.onCreate, but did not and never returned.
이 테스트 케이스는 별도의 ActivityInstrumentationTestCase2 클래스/파일에 구현하는 경우에도 발생합니다 그래서 로그는이 순서로 라이프 사이클 이벤트를 보여 주었다. 그리고이 겹침이 아직 겹치지 않아서 2 개의 테스트가 항상 OK이지만,이 겹침을 초래하는 순서로 3 개의 테스트를 실행하면 getActivity()에 대한 세 번째 호출이 결코 리턴되지 않습니다.
필자는 계기를 사용하여 onPause() + onStop() + onDestroy()를 수동으로 호출하고, 테스트 사이에 긴 수면 시간을 도입하고, instrumentationTestCase의 작업을 지우고, 내 tearDown의 점검을 재정렬하는 것과 같은 모든 것을 시도했지만 아무런 도움이되지 않았습니다. .마지막으로, 나는 실수로 검사 전에 setActivity (널)을 제거하고, 라이프 사이클 이벤트가 올바르게 정렬있어 :
test1.tearDown() called;
test1.onStop();
test1.onDestroy();
test1.tearDown() over;
test2.getActivity()
test2.onCreate();
...
그래서 정말 내 경우의 차이를 만들 었는지 : ActivityTestCase.setActivity를 호출하지 않습니다(). 이로 인해 super.tearDown()이 활동의 라이프 사이클 이벤트를 직접 호출하지 못하게하고 정리 작업이 나중에 발생하여 문제를 일으킬 수 있습니다.
- 1. 함수가 두 번째 열을 반환하지 않습니다.
- 2. 파이썬 함수가 두 번째 값을 반환하지 않습니다.
- 3. 첫 번째 '찾기'호출이 연결된 데이터를 반환하지 않습니다. 두 번째로 '발견'호출
- 4. postJson 값을 반환하지 않습니다.
- 5. 두 번째 이미지가 보이지 않습니다.
- 6. 문자열 분할 메서드가 두 문자열을 반환하지 않습니다
- 7. 첫 번째 "ImageView", 두 번째 "RelativeLayout"- 작동하지만 첫 번째 "RelativeLayout", 두 번째 "ImageView"-하지 않습니다.
- 8. ActiveRecord가 행을 반환하지 않지만 두 번째 중복 행 이후에 반환됩니까?
- 9. 함수가 값을 반환하지 않습니다.
- 10. SQL 문이 두 날짜 사이에 값을 반환하지 않습니다.
- 11. simplexml에서 자식을 반환하지 않습니다
- 12. Java 메서드가 연결된 목록의 첫 번째 값을 반환하지 않습니다.
- 13. PHP는 mysql 쿼리의 첫 번째 열을 반환하지 않습니다.
- 14. $ string [i]는 i 번째 문자를 반환하지 않습니다.
- 15. PostgreSQL 업데이트가 0을 반환하지 않습니다.
- 16. mysql_fetch_row가 전체 배열을 반환하지 않습니다.
- 17. Regex가 결과를 반환하지 않습니다.
- 18. CFArrayGetValueAtIndex가 aything을 반환하지 않습니다.
- 19. FQL 쿼리가 결과를 반환하지 않습니다.
- 20. Mysql이 모든 결과를 반환하지 않습니다.
- 21. 두 번째 자녀의 두 번째 자녀 - Jquery
- 22. 두 번째 시도에서 XML이 제대로 파싱되지 않습니다.
- 23. 두 번째 Android 활동에 문자열이 전달되지 않습니다.
- 24. gWidgets : 포인트가 두 번째 화면에 나타나지 않습니다.
- 25. 두 번째 Google+ 버튼이 Firefox에서 보이지 않습니다.
- 26. POST가 두 번째 시간 전까지 작동하지 않습니다
- 27. UIAccelerometer가 두 번째 대리인에게 이벤트를 보내지 않습니다.
- 28. MultiBinding이 두 번째 속성을 선택하지 않습니다.
- 29. 자바 스크립트가 두 번째 페이지에서 작동하지 않습니다.
- 30. JQueryMobile이 두 번째 페이지에서 작동하지 않습니다.
끝내 주셔서 감사합니다. –
u만이 아닙니다. 감사! – iewnait
나는이 문제도 가지고 있었기 때문에 당신은 누군가에게 그것을 묻는 것으로 귀찮게하지 않았습니다. 나는 당신이 해결책에 추가했음을 진심으로 감사한다. – jwir3