안드로이드에서 단위테스트를 위한 Junit 사용하기 (1)
|
[[ 개발환경 ]]
window XP
Android SDK 2.1
JDK 1.5
eclipse galieo
|
이전프로젝트에서는 폭포수 방법론으로 프로세스를 많이 적용해왔다. 초기에 요구사항
전체를 확실히 정의한후 설계와 구현을 단계별로 진행하게 된다. 이 방법론은 점점
사라지는 추세이다. 왜냐하면 이후에 변경되어지는 추가요구사항과 설계를 변경하기가
쉽지 않기 때문이다. 현재 비지니스 환경은 이렇게 경직되어있지 않고 유동적이므로
언제 요구사항이 변경될지 모른다.
이런 환경에서 최근 주목을 끌고 있는 것이 애자일 방법론이다. 애자일은 민첩하고
기민하다는 뜻이다. 애자일 방법론에 대한 기술을 논의하자면 의도에 벗어난 강좌가
될것 같아 여기서 줄이기로 하고, 중요한것은 애자일 방법론에서 주로 사용하는 것이
단위테스트 이다. 이 단위테스트를 위해 java 개발환경에서 주로 사용하는 프레임웍이
junit 이다.
Junit framework 을 eclipse 플러그인으로 만들어 쉽게 사용할수 있도록 제공해 준다.
Java 나 Web Application 에서는 많이 사용해봐서 익숙하지만 Android 에서는 처음이라
이렇게 아티클을 작성하게 되었다.
안드로이드 SDK 를 보게 되면 내부에 Junit 클래스가 존재한다. 그러므로 이전에 작업했던
환경설정과 실행법이 같다. 별 어려움 없이 진행이 가능하며, 단지 특이한 점은
안드로이드 에서 제공하는 TestCase 들이 여럿있다는 것이다. DB 테스트를 위해
DBUnit 라는 것이 있듯이 안드로이드에서도 Activity 단위별로 테스트 할수 있는
ActivityUnitTestCase, Service 를 테스트 해볼수 있는 ServiceTestCase 등이 있다.
전부 조사해보지 않아 상세하게 기술 해볼수는 없지만 우선 2편에서 ActivityUnitTestCase
사용법에 대해 대략적인 사용법을 설명하였다.
1. Android Junit project 생성
|
안드로이드에서 단위테스트를 시행하기 위한 Junit 설정은 프로젝트 생성부터 다르다.
기존에 있는 프로젝트를 대상으로 Junit 을 실행하는 방법과 프로젝트 자체가 Junit 만
시행할수 있는 프로젝트로 나누어 생성할수 있다.
Android Test Project 를 선택하면 아래의 설정화면이 나오는데 Test Target 를 설정하는
곳이 있다. 현재 만들 프로젝트를 Junit 으로 사용할것인지, 아니면 이미 만들어진
프로젝트를 상대로 구동할것인지에 대한 내용을 선택한다. 그리고 Build Target 을
선택할때에는 Target 이 되는 SDK와 맞아야 한다
간단한 테스트 프로젝트를 위해 This project 를 선택하고, 값들을 채운후 Finish 로 셋팅을
마무리 하자. 그런데 버그인지 모르겠지만 An existing Android project 란에 프로젝트를
선택하지 않으면 Finish 버튼이 활성화 되지 않는다. 프로젝트를 생성할수 없게 되는것이다.
원인은 모르겠지만 This project 선택하고 프로젝트를 생성해야 되므로 아무 프로젝트나
Browser 를 클릭해 선택하자.
프로젝트가 생성되었으면 Android Junit Test 를 위해 추가된 설정값이 두가지가 있다.
AndroidManifest.xml 을 열어보자. instrumentation 에 android.test.InstrumentationTestRunner
추가 된 것을 볼수 있다.
두번째는 Application 탭에 Uses Library 로 android.test.runner 를 사용하고 있는 것을
볼수 있다. 이와 같이 두가지는 Junit을 돌리기 위한 필수 요소 이다. 이것은 일반
프로젝트에서 볼수 없는 것으로 기존 프로젝트에서 사용하고 싶다면 설정을 해줘야한다
이제 이 프로젝트가 Debug/Run Configurations 에 제대로 설정되어있는지 보아야한다.
Debug/Run Configurations 을 열어보면 Android JUnit Test 란에 프로젝트가 추가된 것을
볼수 있다. 그리고 오른쪽에 옵션중 Run a single test는 하나의 테스트 클래스를 실행
할수 있는 명령을 내리는 것이고 아래에 Run all tests 는 package 에 포함된 테스트
클래스 모두를 실행할수 있도록 하는 것이다.
이제 환경설정이 끝났으니 Test 클래스를 만들어 실행해본다.
간단하게 Activity 를 실행할수 있는 ActivityUnitTestCase 클래스를 상속받아 만든다.
ActivityUnitTestCase 를 상속받아 만드는 Test Case 클래스는 Activity 클래스를 실행해서
단위테스트하기 위한 의도로 만들어진것이다. 그러므로 Test 할 Activity 를 인자로
포함한다. public class MainTest extends ActivityUnitTestCase<Main> 와 같이
테스트 할 Main Activity class 가 포함되어있다. 그리고 생성자에서는 Main.class 를
상위클래스로 넘겨줘야한다.
public MainTest() {
super(Main.class);
}
Main.java 와 MainTest.java 의 전체 내용은 다음과 같다.
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class Main extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.d("Main", "========================");
}
}
import android.content.Intent;
import android.test.ActivityUnitTestCase;
import android.test.suitebuilder.annotation.MediumTest;
import android.util.Log;
import android.widget.Button;
public class MainTest extends ActivityUnitTestCase<Main> {
private Intent mStartIntent;
private Button mStartButton;
public MainTest() {
super(Main.class);
}
protected void setUp() throws Exception {
super.setUp();
mStartIntent = new Intent(Intent.ACTION_MAIN);
}
@MediumTest
public void testInit(){
Log.d("MainTest", "ActivityUnitTestCase test");
}
}
소스에서 보면 testInit 가 실행되고 다음 Main Activity 클래스를 실행하게 된다.
아래 그림 왼쪽 Junit explore 화면을 보면 테스트가 정상으로 이루어진 것을
볼수 있다. 이런식으로 테스트할 Activity 클래스들을 모아 단위 테스트 클래스를
만들어서 사용하면 될것이다.
다음회는 좀더 상세한 테스트 내용을 기술 하도록 하겠습니다.