2012-11-16 2 views
6

시나리오 :AsyncTask 및 UI 업데이트 솔루션으로 안드로이드 유닛 테스트

내 응용 프로그램의 onClick 처리기를 단위 테스트하려고합니다. Onclick은 REST API에 대해 간단한 검색을 수행하고 결과를 반환하며 UI를 업데이트합니다.

세부 사항 :

온 클릭은 AsyncTask를을 실행는 doInBackground는 REST API를 쿼리하고 결과를 반환합니다. onPostExecute는 결과를 가져 와서 새 ListAdapter를 데이터와 함께 ListView에 할당합니다.

문제 : 같은 UI 스레드와 차단 통화 이후

onPostExecute는 테스트 러너에 의해 호출되지 않습니다. 이것을 다루기위한 몇 가지 패턴이 있습니다. 그러나 AsyncTask를 Runnable에 넣고 LatchCountdown을 사용하여 결과를 기다리면 CalledFromWrongThread Exception이 발생합니다.

UI 업데이트를 수행하는 AsyncTask의 단위 테스트에 대한 좋은 해결책이 있습니까? 아니면 내가 구현할 수있는 더 테스트 할 수있는 디자인?

+0

이것은 ActivityInstrumentationTestCase와 비슷합니다. – dmon

+0

ActivityInstrumentationTestCase2 클래스에서이 작업이 수행되고 있습니다. – bcdennis72

+0

asynctask가 잘 실행되어야합니다 ... – dmon

답변

0

확인에 테스트를 실행하려면, 그래서 생각 해낸 해결책은 이것이다 :

1.) 전 & 후 이벤트의 청취자 인터페이스를 정의합니다.
2.) 활동에 리스너를 구현하십시오.
2. 리스너를 허용하고 'exec'에서 호출되는 내부 AsyncTask를 가진 태스크 래퍼 클래스를 정의하십시오.
3.) 내부 AsyncTask는 onPreExecute 및 onPostExecute에 대해 수신기에 알립니다.
4. 알림을 받으면 Activity가 UI를 업데이트합니다.

는 활동의 테스트를 위해 :
1.)를 순차적으로 실행할 수있는 간부 인 메서드를 재정의, 그것에서 상속하여 래퍼 클래스의 시리얼 버전을 만듭니다
은 - 시작으로 청취자에게 작업을 알립니다.
- 작업을 실행하십시오.
- 청취자에게 작업이 완료되었음을 알립니다.

비동기 버전의 작업을 테스트합니다.
1. 단위 테스트 방법에서 CountdownLatch 및 Runnable을 사용하십시오. UI 업데이트가 필요하지 않으므로 WrongThreadExceptions가 없습니다.

+0

당신은 아마 비슷한 토론 [여기] (http://stackoverflow.com/questions/10491526/how-can-i-test-the 버튼 클릭으로 변경된 활동보기/asy/10491965 # 10491965) 및 [여기] (http://stackoverflow.com/questions/8295003/best-way-to- as-at-asynctask/8317071 # 8317071)를 참조하십시오. – yorkw