안드로이드 개발시 유닛테스트를 하는 방법에 대해 정리한다.
두가지 케이스정도로 정리해보면
1. 액티비티 테스트 : UI 테스트 자동화
2. 클래스 테스트 : 로직을 담고 있는 클래스들을 테스트 자동화
방법은 Android project를 만들 때 Android Test Project로 만든다. 이 때 테스트하고자 하는 앱을 지정하게 되어 있다.
1. 액티비티 테스트
- ActivityInstrumentationTestCase2를 확장
public class HelloActivityTest extends ActivityInstrumentationTestCase2<HelloActivity>
- 일부 메소드 override
protected void setUp()
protected void tearDown()
- test 메소드들 구현
- Activity에 접근은 this.getActivity()로 가능하다.
2. 클래스 테스트
- InstrumentationTestCase 를 확장
public class MetadataManagerTest extends InstrumentationTestCase
- 일부 메소드 override
protected void setUp()
protected void tearDown()
- test 메소드들 구현
AsyncTask를 테스트할 때는 CountdownLatch를 이용해서 비동기 스레드를 테스트 할 수 있다.
출처 : http://kingori.egloos.com/4554640
public class AsyncTaskTest extends InstrumentationTestCase {
public void testAsyncTask() {
final Data data = new Data();
final CountDownLatch signal = new CountDownLatch(1); // countdown 1을 기다리는 랫치
Callback a = new Callback() {
onPrepare() { data.val = 1; }
onSuccess() { data.val = 2; signal.countDown();} // 작업이 끝나면 1을 내려 유닛테스트 쓰레드가 진행되게 한다.
onFail() { data.val = 3; signal.countDown(); } // 실패할 수도 있으니..
}
runTestOnUiThread( new Runnable() {
public void run() {
Manager.getInstance().doSomething(a);
}
});
signal.await(); // 랫치 값이 0이 될 때 까지 대기 상태
assertEquals( data.val, 2 ); //결과 확인
}
}