티스토리 뷰
테스팅을 실제로 하는 부분인것 같다.
안드로이드는 SDK와 통합된 쉽고도 강력한 테스트 프레임워크를 제공한다. 테스트 작업은 어플리케이션 개발에서 매우 중요한 부분인 만큼, 이 예제는 테스팅의 기본적인 사항에 관해 이야기하고, 여러분이 테스팅 작업을 원활히 수행할 수 있도록 차근 차근 전 과정에 관해 설명한다. 이 문서는 여러분에게 아마도 익술할, Hello World 어플리케이션을 테스트 하기 위하여, Eclipse상에서 테스트 프로젝트를 생성하고, 테스트를 추가하고, 테스트를 직접 수행하는 과정을 설명한다.
만일 여러분이 테스트와 Instrumentataion 프레임워크에 관해 전반적인 내용에 관심이 있다면, Testing Android Application 문서를 살펴보라. 만일 보다 전문적인 애용에 관심이 있다면, Activity Testing 튜터리얼을 참고하라.
Prerequisites
이 튜터리얼은 Hello World 튜터리얼을 기반으로 진행된다. 만일 여러분이 Hello World 튜터리얼을 아직 끝마치지 못했다면, 지금 끝내는 편이 좋을 것이다. 안드로이드 어플리케이션의 핵심에 관해 배울 수 있는 동시에, 테스트에 사용될 어플리케이션도 하나 생기는 셈이다. 이 튜터리얼은 여러분이 Eclipse ADT 플러그인과 다른 SDK툴을 이용하여, 테스트 프로젝트를 설정하는 방법을 설명한다. 여러분은 안드로이드 버전 1.5(API Level3) 이상의 개발 환경을 갖추고 있어야한다.
만일 여러분이 Eclipse를 사용하는 대신 커맨드 라인 상에서 직접 테스트를 실행하고 싶다면, Testing in Other IDEs문서를 참고하라.
Creating the Test Project
Hello World 튜터리얼에서 여러분은 HelloAndroid라고 하는 안드로이드 어플리케이션을 만들었다. 그리고, 안드로이드 어플리케이션을 테스트 하는 어플리케이션 역시 하나의 안드로이드 어플리케이션이며, Eclipse 프로젝트로 생성된다. New > Android Test Project 다이얼로그를 이용해, 테스트 프로젝트와 테스트 관련 프레임워크를 동시에 생성할 수 있다.
테스트 프로젝트와 테스트 어플리케이션을 생성하기 위해서는 다음과 같은 단계를 거쳐야 한다.
1. Eclipse에서, New > Project > Android > Android Test Project를 선택하면, 새로운 Android Test Project 창이 나타난다.
2. 다음과 같이 값을 설정한다.
- Create Android Project | Project Name : HelloAndroid (Next)
- Select Test Target | 테스트할 프로젝트 (Next)
- Select Build Target | 1.5이상 선택 (Next)
Creating the Test Case Class
이제 여러분은 HelloAndroid를 테스트하기 위한 테스트 프로젝트를 하나 만들었다. HelloAndroidTest 프로젝트에는 수행될 테스트를 담을 테스트 클래스만을 제외하고, 어플리케이션을 빌드하고 실행하는데 필요한 모든 요소들이 포함되어 있다. 다음 단계는, 테스트 클래스를 정의하는 것이다. 이 튜터리얼에서는 Activity를 테스트 할 때 사용되는 안드로이드 테스트 클래스를 상속받은 테스트 클래스를 생성 할 것이다. 이 클래스는 4가지 메서드를 갖는다.
- HelloAndroidTest : 클래스 생성자
- setUp() : JUnit setUp()의 오버라이드 메서드, 각각의 테스트가 수행되기 전에 필요한 환경 설정을 수행하는데 사용한다.
- testPreconditions() : HelloAndroid 어플리케이션이 정상적으로 시작되었는지를 확인하는데 사용할 테스트를 포함한다.
- testText() : 이 테스트는 HelloAndroid 어플리케이션 상에 출력되는 문자열 어플리케이션 리소스 문자열이 동일한지를 테스트한다. 이 메서드는 어플리케이션 UI를 단위 테스트 하는 하나의 예제이다.
다음과 같은 방식으로 테스트 케이스 클래스를 추가한다.
- Eclipse에서 HelloAndroidTestProject를 연다.
- src/ 폴더를 확장한후, com.example.helloandroid.test 패키지를 선택하고 마우스 오른쪽 > New > Class를 선택
- 생성창에서 다음의 내용을 입력한다.
- Name : "HelloAndroidTest"
- Superclass : "android.test.ActivityInstrumentationTestCase2<?>"로 지정한다. 뒤의 Generic 파라메터는 테스트할 Activity 클래스 이름 - HelloAndroidTest.java 파일이 프로젝트에 추가가되고, Activity를 테스트할 때 사용되는 ActivityInstrumentationTestCase2<T> 클래스를 확장한 HelloAndroidTest 클래스를 담고 있다.
- HelloAndroidTest.java 파일을 연다.
package com.example.helloandroid.test; import com.example.helloandroid.MainActivity; import android.test.ActivityInstrumentationTestCase2; public class HelloAndroidTest extends ActivityInstrumentationTestCase2<MainActivity> { }
이런 형식으로 나온다면 된것임.
public HelloAndroidTest() { super("com.example.helloandroid", MainActivity.class); }
Adding a setup method
setUp() 메서드는 각 테스트 메서드가 호출되기 전에 수행된다. 여러분은 테스트 환경을 초기화하고 테스트 환경을 준비할 목적으로 setUp() 메서드를 구현할 수 있다. 이 튜터리얼에서는 setUp() 메서드가 Hello, Android 어플리케이션을 시작하고, 화면상에 출력된 문자열과 리소스 파일에 선언된 문자열 값을 얻어오는 일을 수행한다.
우선, 다음과 같은 코드를 추가하라.
private MainActivity mActivity; private TextView mView; private String resourceString; @Override protected void setUp() throws Exception { super.setUp(); mActivity = this.getActivity(); mView = (TextView) mActivity.findViewById(com.example.helloandroid.R.id.textview); resourceString = mActivity.getString(com.example.helloandroid.R.string.app_name); }
Adding a preconditions test
선결 조건 테스트는 다른 테스트를 수행하기 전에, 어플리케이션의 초기 조건을 확인하기 위해 사용된다. setUp()메서드와 유사하지만, 전체 테스트 과정에서 한번만 수행됨으로 오버헤드가 적다.
비록, 선결 조건 테스트가 다양한 조건들을 확인할 수 있지만, 예제에 사용된 테스트 어플리케이션에서는 어플리케이션이 올바르게 초기화 되었고, TextView가 존재하는지만을 체크하면 된다. 조건을 테스트하기 위하여, assertNotNull() 메서드를 사용하며, 테스트는 TextView 인스턴스 참조 변수가 Null이 아닌 경우에만 성공한다.
public void testPreconditions() { assertNotNull(mView); }
이제, 간단한 단위 테스트를 테스트 클래스에 추가해 보자. testText() 메서드는 JUnit의 Assert 메서드를 호출하여 화면에 출력되는 문자열이 올바른지 확인 할 것이다.
이 예제에서는 TextView가 HelloAndroid의 main.xml 상에 선언된 hello문자열 리소스를 표시해야 한다고 가정하고, assertEquals(String, String) 메서드를 통해 어플리케이션 리소스에서 직접 읽어 들인 문자열과 TextView에서 출력하고 있는 문자열을 비교한다.
public void testText() { assertEquals(resourceString, (String)mView.getText()); }
The finished test case class
이제, 테스트를 모두 작성하였다. 온전한 테스트 케이스 클래스 코드는 다음과 같을것이다.
package com.example.helloandroid.test; import android.test.ActivityInstrumentationTestCase2; import android.widget.TextView; import com.example.helloandroid.MainActivity; public class HelloAndroidTest extends ActivityInstrumentationTestCase2<MainActivity> { private MainActivity mActivity; private TextView mView; private String resourceString; public HelloAndroidTest() { super("com.example.helloandroid", MainActivity.class); } @Override protected void setUp() throws Exception { super.setUp(); mActivity = this.getActivity(); mView = (TextView) mActivity.findViewById(com.example.helloandroid.R.id.textview); resourceString = mActivity.getString(com.example.helloandroid.R.string.app_name); } public void testPreconditions() { assertNotNull(mView); } public void testText() { assertEquals(resourceString, (String)mView.getText()); } }
Running the Tests and Seeing the Results
이제 여러분은 Hello, Android 어플리케이션을 테스트 할 수 있다. Eclipse 에서는 Android JUnit Test 항목을 이용하여 테스트를 실행할 수 있다. 테스트 어플리케이션을 실행하기 위해, 패키지 익스플로러 상에서 마우스 오른쪽 버튼을 클릭한 후, Run As > Android JUnit Test 항목을 선택하라.
ADT 플러그인은 테스트 어플리케이션과 테스트 대상 어플리케이션을 타겟 에뮬레이터나 디바이스에 실행시킨다. 두 개의 어플리케이션이 모두 실행되면, 테스팅 프레임워크가 테스트를 수행한 후 Eclipse JUnit창에 테스트 결과를 출력한다.
아래에서 알 수 있듯이, JUnit View는 두 개의 구분된 패널을 이용해 테스트 결과를 표시한다. 상위 패널은 테스트 결과를 요약해서 보여주고, 아래 쪽 패널은 특정 테스트가 실패한 경우 Stack Trace 결과를 보여준다.
(글을 작성하는 현재는 조금 변경이 있지만, 그냥 보면 구성자체가 비슷해서, 알수 있을것이다.)
테스트 결과는 아래와 같이 요약된다.
- 테스트 수행에 걸린 총 시간
- 수행된 모든 테스트 수(Runs) - 전체 테스트 클래스에 포함되어 있는 모든 테스트의 숫자.
- 테스트 중 발생한 오류 수(Errors) - 테스트 중에 발생한 오류 및 예외상황
- 테스트 중 발생한 실패 수(Failures) - assert로 인해 실패한 테스트 수
- 프로그래스바 - 테스트 진행에 따라 왼쪽에서 오른쪽으로 차오르며, 모든 테스트가 성공하면 녹색 그렇지 못할 경우 빨간색으로 남는다.
'Mobile > Android' 카테고리의 다른 글
[Android Studio] Module의 build.gradle (0) | 2014.03.07 |
---|---|
[Android Studio] 기본 (0) | 2014.03.07 |
Testing in Other IDEs (0) | 2014.03.07 |
Data backup (0) | 2014.02.19 |
[Android]화면 밝기 관련 (0) | 2014.02.10 |
- Total
- Today
- Yesterday
- ubuntu
- Spring
- ios
- Gradle
- go
- cocoapods
- CentOS
- Kotlin
- war
- golang
- Java
- tomcat
- centos8
- nodejs
- Codable
- rxswift
- github
- Windows
- php
- Xcode
- Python
- SWIFT
- Linux
- enum
- android
- MySQL
- git
- docker
- windows10
- intellij
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |