티스토리 뷰

Mobile/Android

Testing. Eclipse with ADT

out of coding 2014. 2. 7. 12:39

ADT는 테스팅 환경을 효과적으로 설정할 수 있도록 다양한 기능을 지원한다.

  • 테스트 프로젝트를 생성하고 대상 어플리케이션과 연결시켜 준다. 메니페스트 파일에 필요한 <instrumentation> 엘리먼트를 자동으로 추가한다.
  • 개발자가 손쉽게 대상 어플의 클래스를 조사할 수 있도록 어플리케이션 클래스들을 임포트 시켜준다.
  • 안드로이드 테스팅 프레임워크에서 필요로 하는 각종 플래그 값을 포함하는 테스트 동작 환경 설정(Run Configuration)을 생성해준다.
  • Eclipse내에서 테스트 어플리케이션을 실행할수 있다. ADT는 테스트 어플리케이션과 대상 어플리케이션을 자동으로 빌드한 후, 디바이스에 설치한 후, 테스트 어플리케이션을 실행해, 그 결과를 Eclipse 윈도우에 출력한다.


Creating a Test Project

  • 안드로이드 어플의 테스팅 환경을 꾸미기 위해서는, 테스트 코드를 포함할 수 있는, 별도의 어플리케이션 프로젝트를 생성해야 한다. 새로 생성한 프로젝트는 다른 안드로이드 어플과 동일한 구조를 가진다. 소스코드, 리소스, 메니페스트 파일과 같이 일반 어플리케이션 프로젝트와 동일한 요소를 포함한다. 테스트 어플과 테스트 대상 어플은 매니페스트 파일의 <instrumentation> 엘리먼트로 연결된다.
  • 테스트 프로젝트를 생성 - Eclipse의 'New Android Test Project' 메뉴를 이용한다. 일반적으로 새로운 프로젝트를 생성하는 순간에 나타나게 된다고 하는데, 나는 안나타남...
  • 테스트 프로젝트의 생성 순서
    1. File > New > Other
    2. Android항목에서 Android Test Project
    3. 프로젝트 이름 입력, 웬만하면 테스트하려는 프로젝트의 이름에 Test를 붙이도록 하자
    4. Existing Android Project 항목 선택 > Browse에서 테스트할 프로젝트 선택
    5. 테스트 어플리케이션을 작동할 sdk 플랫폼을 선택
    6. 엄청 쉽게 완료됨


Creating a Test Application

  • 프로젝트가 생성되었다면 당연하게도 어플을 완성해야 하겠다. 테스트 어플은 Activity는 필요가 없다. 원한다면 만들수도 있지만. 테스트 어플리케이션은 여러 가지 요소(Activity, 확장된 안드로이드 테스트 클래스, jUnit 확장 클래스, 기타 등등의 클래스)들로 이루어질 수 있지만, 테스팅 기능들을 활용하기 위해서는 안드로이드 테스트 클래스나 jUnit 클래스를 상속받는 요소들을 추가해야 한다.
  • 테스트 어플리케이션은 안드로이드 GUI를 포함하지 않으며, Eclipse상에서 실행할 경우 그 결과는 jUnit View에 출력된다. InstrumentationTestRunner를 이용하여 테스트를 실행하면, 테스트 클래스에 포함된 모든 메소드가 수행된다. TestSuite클래스를 이용하여 작동 방식을 변경 할수도 있다.
  • 테스트 어플을 만들때는 우선 android.test 패키지에 포함되어 있는 클래스들중에 하나를 이용해야겠다. 이 클래스들은 jUnit의 TestCase 클래스를 확장하여 만들어졌다. 머 몇가지 예외는 있지만 일반적으로 안드로이드 테스트 클래스는 Instrumentation 기능을 제공한다.
  • TestCase를 상속받을때, 일반적으로 setUp()과 tearDown() 메서드를 오버라이드 하게 된다.
  • setUp() : 테스트 클래스의 각 테스트 메서드가 호출되기 전에 호출된다. 테스트를 위한 환경을 설정하는데 사용하라. 예를 들어 setUp()메서드 내에서 새로운 Intent 오브젝트를 생성한 후, 해당 Intent를 이용해 Activity를 시작하도록 할 수 있다. (Override시 반드시 첫줄에 super를 호출하라.)
  • tearDown() : 테스트 클래스의 각 테스트 메서드가 호출된 후에 호출됨. 가비지 컬렉션을 수행하고, 다음 테스트를 진행하기 위해 환경을 다시 설정할 때 사용한다. (Override시 반드시 첫줄에 super를 호출하라.)
  • 유용한 관습(?)(Convention)은 테스트 클래스에 testPreConditions() 메서드를 추가하는 것이다. 이게 무슨 소리냐... 이 메서드를 테스트 대상이 되는 어플리케이션이 올바르게 초기화되었는지를 테스트 하는데 사용하라고 한다. 이 부분이 실패가 된다면, 초기 설정이 잘못된 것이므로, 이후에 발생하는 테스트 결과는 믿을 수 없는 값으로 간주하면 된다.


Running Tests

Eclipse ADT를 이용하여 테스트 어플을 실행하면, 결과는 Eclipse View 패널에 출력된다. 테스트 어플 전체이거나, 혹은 클래스 하나만 선별하여 테스트할수 있다. 이를 위해 Eclipse는 adb 커맨드툴을 동작시키고 결과를 출력한다. 따라서 Eclipse를 이용하거나 그렇지 않거나 테스트에 실제적으로 차이가 없다.


Eclipse에서 테스트를 수행하는데는 두 가지 옵션이 있다.

  • 일반 어플과 동일한 방식을 사용.프로젝트에서 마우스 오른쪽 > Run As > Android JUnit Test
  • 테스트 프로젝트를 위한 Eclipse Run Configuration을 만듬. 이 부분은 테스트 슈트를 만들기 위한 경우일때 유용하며, 하나의 테스트 슈트를 실행하려면 해당 테스트 Run Configuration을 실행하면 된다.

  • Run Configuration 만드는 법
  1. 패키지 익스플로러에서, 테스트 프로젝트를 선택. 메인메뉴에서 Run > Run Configurations 항목을 선택
  2. 왼쪽 패널에서 Android JUnit Test 항목을 찾은후에, 오른쪽 패널에서 Test탭을 클릭. 'Name'텍스트 박스에는 프로젝트 이름이 'Test Class' 드랍다운박스에는 프로젝트에 포함되어 있는 테스트 클래스 목록이 표시될것 이다.
  3. 하나의 테스트 클래스를 동작시키기 위해서는, 'Run a Single Test'를 클릭한후. 'Project:'텍스트 박스에 프로젝트 이름. 'Test Class:'텍스트 박스에 클래스 이름을 입력한다. 모든 테스트 클래스를 동작시키기 위해서는, 'Run All Tests'를 클릭한후, 텍스트 박스에 프로젝트 혹은 패키지 이름을 입력한다. 엄청 어려운거 같지만 열어보면 그냥 안다.
  4. Target Tab 클릭
  5. 옵션 : 에뮬레이터를 사용한다면, 'Automatic'을 클릭한 후, AVD선택 화면에서 원하는 AVD를 선택
  6. Emulator Launch Parameter 패널에서, 사용하길 원하는 안드로이드 에뮬레이터 플래그를 설정한다. Emulator Startup Options 문서에 서술되어 있다.
  7. Common Tab 클릭. Configuration 을 로컬에 저장하기 위해 'Local to Save' 를 클릭하거나, 'Shared' 버튼을 클릭해 다른 프로젝트에 저장할 수 있다.
  8. 옵션: Configuration 을 Run 툴바나 Favorites 메뉴에 추가하라.
  9. 옵션: Configuration 을 Debug 메뉴와 툴바에 추가하기 위해서는 'Debug' 항목 옆에 위치한 체크박스를 클릭하라.
  10. Configuration 을 저장한 후, 'Close' 를 클릭하라.
  11. Eclipse 표준 툴바에서, 녹색 Run 화살표 버튼 아래를 클릭하라. 저장되어 있는 Run 과 Debug Configuration 항목을 보여준다. 
  12. 막 생성한 Run Configuration 을 선택하라.
  13. 테스트 진행 상황은 Console View 에 표시된다. 아래와 같은 메세지를 확인할 수 있다.
  14. 'Performing Android.test.InstrumentationTestRunner JUnit launch' 는 클래스 이름은 여러분이 선택한 안드로이드 Instrumentation 클래스에 따라 달라진다.
  15. 만일 에뮬레이터를 사용하는데 에뮬레이터가 아직 실행되지 않은 상황이라면, 다음과 같은 메세지가 출력된다. 'Automatic Target Mode: launching new emulator with compatible AVD avdname'
  16. 만일 테스트 어플리케이션이 아직 설치되지 않았다면, 'Uploading testclass.apk onto device 'device-id'' 과 같은 메세지가 출력된다. 이어서 'Installing testclass.apk' 메세지가 출력된다.
  17. 'Launching instrumentation Android.test. InstrumentationTestRunner on device device-id' 메세지는 안드로이드 Instrumentation 시스템이 막 테스트를 시작함을 나타낸다. 
  18. 'Test run complete' 이 메세지가 출력되면 모든 테스트가 종료된 것이다.
  19. 테스트 결과는 JUnit View 에 표시된다. 이 화면은 상단의 요약 부분과, 하단의 스택 트레이스(Stack Trace) 부분으로 나누어 진다. 화면 상단의 헤더 부분에는 다음과 같은 정보를 포함한다.
  20. 테스트 수행에 걸린 총 시간 
  21. 수행된 모든 테스트 수(Runs) - 전체 테스트 클래스에 포함되어 있는 모든 테스트의 숫자.
  22. 테스트 중 발생한 오류 수(Errors) - 테스트 중에 발생한 오류 및 예외상황. 
  23. 테스트 중 발생한 실패 수(Failures) - assert 로 인해 실패한 테스트 수
  24. 프로그레스 바 - 테스트 진행에 따라 왼쪽에서 오른쪽으로 차오르며, 모든 테스트가 성공하면 녹색으로 그렇지 못할경우 빨간색으로 남는다.
  25.  화면 상단 본문 부분에는 테스트 수행에 관한 상세한 정보가 포함된다. 수행된 각각의 테스트에 관하여 클래스 이름를 확인 할 수 있다. 이를 클릭하면, 각각의 테스트 메서드 호출에 따른 결과와 코드 라인을 확인 할 수 있다. 만일 테스트 메서드를 더블클릭하면, 해당 소스를 에디터 View 에 표시한 후, 해당 메서드 위치로 포커스를 옮겨 준다. 

 화면 하단은 스택 트레이스(Stack Track) 정보를 표시한다. 화면 상단에서 실패한 테스트를 선택하면, 화면 하단은 해당 테스트에관한 스택 트레이스 정보를 표시해 준다. 코드의 특정 라인에 관한 내용을 더블클릭하면, 해당 소스를 에디터 View 에 표시한 후, 해당 메서드 위치로 포커스를 옮겨 준다. 성공적으로 수행된 테스트에 관해서는 별다른 정보가 표시되지 않는다



'Mobile > Android' 카테고리의 다른 글

Hello, Testing  (0) 2014.03.07
Testing in Other IDEs  (0) 2014.03.07
Data backup  (0) 2014.02.19
[Android]화면 밝기 관련  (0) 2014.02.10
Testing. Instrumentation  (1) 2014.02.06
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함