Android/App개발2011. 6. 16. 18:31

안드로이드 개발시 유닛테스트를 하는 방법에 대해 정리한다.

두가지 케이스정도로 정리해보면
 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 ); //결과 확인
  }
}

Posted by 삼스