티스토리 뷰
이번 내용은 이클립스를 사용하면, 필요없는 내용이다.
이 글을 작성하는 나도 별로 이렇게 까지 알고 싶지는 않다.
안드로이드가 요즘 정말 재미가 없어서 그런가.
일단은 도스 커맨드창에 적응이 되어 있는 사람들이라면, 쉽게 접근할수 있을것이라 생각한다.
그걸 모르면, 그냥 이클립스 깔고 테스트를 진행하길 바란다. 웬만하면 다들 이클립스 쓰겠지만...
Working with Test Projects
일단 안드로이드 툴을 이용하여 테스트 프로젝트를 만들거나, 이미 존재하는 테스트 코드를 안드로이드 테스트 프로젝트로 변환하거나, 이미 존재하는 안드로이드 테스트 프로젝트를 'run-tests' Ant 타겟에 추가할 수 있다. 이러한 작업에 관해서는 앞으로 이어질 섹션에서 보다 자세히 다루게 될 것이다.
Creating a test project
안드로이드 툴을 이용하여 테스트 프로젝트를 만들기 위해서는 다음과 같이 입력하라.
$ android create test-project -m {main_path} -n {project_name} -p {test_path}
각항목들은 필수 요소이므로, 꼭 넣어주도록 한다. 상세 내용은 다음과 같다.
옵션 |
내용 |
설명 |
-m, --main |
테스트 어플리케이션 경로를 기준으로한, 테스트 대상 어플리케이션의 상대 경로 |
예를 들면, 테스트 대상 어플리케이션의 경로가, source/HelloAndroid이고, 테스트 프로젝트를 source/HelloAndroidTest폴더를 생성한다면, --main 값은 /HelloAndroid여야 한다. |
-m, --name |
테스트 프로젝트 이름 |
|
-p, --path |
테스트 프로젝트 생성 경로 |
안드로이드 툴은 해당 경로에 테스트 프로젝트 파일과 필요한 디렉토리 구조를 생성한다. 디렉토리가 존재하지 않는 경우 해당 디렉토리를 생성한다. |
만일 작업이 성공적으로 수행 되었다면, 안드로이드는 STDOUT으로 생성된 파일과 디렉토리 목록을 출력한다.
작업 결과로 새로운 테스트 프로젝트가 생성된다. 생성된 디렉토리 구조와 빌드 파일 컨텐츠는 일반 안드로이드 어플리케이션과 동일한다. 관련 정보는 Developing In Other IDEs문서에 자세하게 설명되어 있다.
작업 결과 AndroidManifest.xml 파일이 Instrumentation 정보와 함께 생성된다. 테스트를 실행할때, 안드로이드는 이 정보를 기반으로 테스트 대상이 되는 어플리케이션을 컨트롤 할 수 있도록 Instrumentation와 함께 로드한다.
예를 들면, Hello, World 튜터리얼 어플리케이션을 ~/source/HelloAndroid에 생성했다고 가정하자. 이 어플리케이션은 패키지 이름이 com.example.helloandroid이고 HelloAndroid라는 Activity를 갖고 있다. 여러분은 ~/source/HelloAndroidTest 위치에 다음과 같은 테스트 프로젝트를 생성할 수 있다.
$ cd ~/source
$ android create test-project -m ../HelloAndroid -n HelloAndroidTest -p HelloAndroidTest
이 결과 ~/src/HelloAndroidTest 디렉토리가 생성된다. 새 디렉토리에는 AndroidManifest.xml파일이 있으며, 이 파일은 다음과 같은 instrumentation 연관 정보를 담고 있다.
- <application> : <uses-library>를 담고 있다.
<uses-library android:name="android.test.runner"> : 안드로이드 테스트 어플리케이션은 android.test.runner 라이브러리를 사용함을 나타낸다.
- <instrumentation> : 다음과 같은 속성 값을 포함한다.
- android:name="android.test.InstrumentationTestRunner" : InstrumentationTestRunner가 테스트를 수행함을 나타낸다.
- android:targetPackage="com.example.helloandroid" : 테스트 대상 어플리케이션의 패키지 이름
- android:label = "Tests for .HelloAndroid" : 이 테스트에 관해 사용자가 이해할 수 있는 라벨 정보. 기본적으로 안드로이드 툴이 'Tests for ~'라는 형식으로 지정해 준다.
옵션 |
내용 |
-m, --main |
테스트 어플리케이션 경로를 기준으로한, 테스트 대상 어플리케이션의 상대 경로 |
-p, --path |
테스트 프로젝트 생성 경로 |
작업이 성공적으로 수행되었다면, 안드로이드는 STDOUT으로 생성된 파일과 디렉토리 목록을 출력한다.
Creating a Test Application
테스트 프로젝트가 생성되었다면, 테스트 어플리케이션을 만들어야 한다. 테스트 어플리케이션은 Activity를 필요로 하지 않는다. (원한다면 만들어도 된다.) 테스트 어플리케이션은 여러 가지 요소(Activity, 확장된 안드로이드 테스트 클래스, JUnit확장 클래스, 기타 등등의 클래스)들로 이루어질 수 있지만, 테스팅 기능들을 가장 잘 활용하기 위하여, 안드로이드 테스트 클래스나 JUnit 클래스를 상속받는 것이 좋다.
InstrumentationTestRunner 혹은 이와 유사항 TestRunner를 이용하여 테스트를 실행하면, 테스트 클래스에 포함된 모든 메서드가 수행된다. TestSuite 클래스를 이용하여 작동 방식을 변경 할 수도 있다.
테스트 어플리케이션을 만들때는 우선 android.test 패키지에 포함되어 있는 안드로이드 테스트 클래스 중에 하나를 이용하라. 이것들은 JUnit의 TestCase 클래스를 확장하여 만들어졌다. 몇 가지 예외적인 경우를 제외하고 일반적으로 안드로이드 테스트 클래스는 Instrumentation 기능을 제공한다.
테스트 케이스 클래스를 상속할 때, 개발자는 일반적으로 setUp()과 tearDown()메서드를 오버라이드 한다.
- setUp() : 이 메서드는 테스트 클래스의 각 테스트 메서드가 호출되기 전에 호출된다. 테스트를 위한 환경을 설정하는데 사용하라. 예를 들어 setUp() 메서드 내에서 새로운 인텐트 오브젝트를 생성한 후, 해당 인텐트를 이용해 Activity를 시작하도록 할 수 있다. *주의점 : 이 메서드를 오버라이드 할 때, 코드 첫줄에서 super.setUp() 구문을 반드시 호출하라.
- tearDown() : 이 메서드는 테스트 클래스의 각 테스트 메서드가 호출된 후에 호출된다. 가비지 컬렉션을 수행하고, 다음 테스트를 진행하기 위해 환경을 다시 설정할 때 사용하라. *주의점 : 이 메서드를 오버라이드 할 때, 코드 첫줄에 super.tearDown() 구문을 호출하라.
- 필요한 경우, 메인 어플리케이션과 테스트 어플리케이션을 빌드한다.
- 테스트 어플리케이션과 메인 어플리케이션을 대상 디바이스에 인스톨한다.
- 커맨드라인에 다음과 같이 입력한다.
Parameter |
내용 |
설명 |
{test_package} |
테스트 어플리케이션의 패키지 이름 |
테스트 어플리케이션 메니페스트에 선언되어 있는 package 속성 값. |
{runner_class} |
사용 할 Test Runner 클래스 이름 |
일반적으로 InstrumentationTestRunner가 사용된다. |
Flag |
내용 |
설명 |
-w |
|
Instrumentation가 종료되기 전까지, AM Instrument가 대기 하도록 한다. 이 옵션이 필수 사항은 아니지만, 만일 이 옵션을 사용하지 않으면, 테스트 결과가 나오기 전에 AM Instrument가 종료되며, 여러분은 테스트 결과를 확인 할 수 없을 것이다. |
-r |
|
Raw 포멧으로 결과를 출력한다. 테스트 출력 값들이 하나의 테스트 결과로 종합되지 않기를 원할 때 사용된다. (예를 들어 성능을 측정하기 위한 자료를 수집하는 경우), 이 플래그는 ‘-e perf true’ 플래그와 함께 사용되도록 설계되었다. |
-e |
<test_options> |
<Key-Value> 쌍으로 이루어진 테스트 옵션을 지원한다. 전달된 옵션은 Instrumentation의 onCreate() 시점에 적용된다. –e 플래그는 다양한 테스트 옵션을 적용하기 위해, 중복해서 사용할 수 있다. 테스트 옵션에 관한 내용은 다음 테이블에서 설명된다. 테스트 옵션은 InstrumentationTestRunner 클래스를 사용하는 경우에만 적용된다. |
Key |
내용 |
설명 |
package |
<Java_package_name> |
테스트 어플리케이션에 포함되어 있는 온전한 Java 패키지 이름. 해당 패키지에 속성 테스트 케이스 클래스들이 수행된다. 패키지 이름이 안드로이드 패키지 이름이 아닌 점을 주의하라. 하나의 안드로이드 테스트 어플리케이션은 오직 하나의 안드로이드 패키지 이름을 갖지만, 그 안에 여러 자바 패지키를 포함 할 수 있다. |
class |
<class_name> |
온전한 테스트 케이스 클래스 이름. 여기에 명시된 테스트 클래스만 수행된다. |
|
<class_name>#method name |
온전한 테스트 케이스 클래스 이름과 그 안에 속한 메서드 이름. 해당 메서드 만이 실행된다. 특정 클래스에 속한 메서드임을 나타내기 위하여 해쉬 마크(#)가 사용된다. |
func |
true |
InstrumentationTestCase 클래스를 상속받는 모든 테스트 케이스 클래스를 수행한다. |
unit |
true |
InstrumentationTestCase 혹은PerformanceTestCase 클래스를 상속받지 않은 테스트 케이스 클래스만 수행한다. |
size |
[small | medium |large] |
테스트 메서드에 적힌 사이즈 어노테이션을 기반으로 테스트를 수행한다.@SmallTest, @MediumTest, @LargeTest. 어노테이션이 사용 가능하다. |
perf |
true |
PerformanceTestCase 를 상속받은 테스트 클래스를 실행한다. 이 옵션을 사용하는 경우, 테스트 출력이 테스트 결과로 포맷되지 않고 Raw 포맷으로 출력되도록 -r 플래그를 사용하라. |
debug |
true |
테스트를 디버그 모드에서 수행한다. |
log |
true |
선택된 모든 테스트들 정보를 실행하지 않고, 출력한다. 테스트 옵션과 플래그를 잘 설정했는지 확인하고자 할 때 사용하면 유용하다. |
emma |
true |
EMMA 코드 커버리지 분석기능을 실행한 후, 그 결과를 디바이스의 /data/coverage.ec 에 기록한다. Note: 이 옵션은 coverage target 으로 생성되는, 테스트 어플리케이션의 EMMA-instrumenteted 빌드를 필요로 한다. |
coverageFile |
<filename> |
EMMA 코드 커버리지의 기본 로케이션 정보를 변경한다. 경로 정보는 UNIX 포맷으로 지정해야 한다. |
- AM Instrument는 Key-Value값을 Bundle에 담아, onCreate()를 호출한다.
- package옵션이 class옵션보다 우선된다. 만일 여러분이, package옵션으로 특정 package를 지정한 후, class 옵션에 해당 package에 속한 특정 class만을 지정하더라도, 해당 package에 속한 모든 테스트가 수행된다.
- func키와 unit키는 상호 배타적이며, 동시에 사용될 수 없다.
- 테스트 어플리케이션은 com.android.demo.app.tests 이다
- 다음의 세가지 테스트 클래스가 존재한다.
- UnitTests : testPermission과 testSaveState 메서드를 갖고 있다.
- FunctionTests : testCamera, testXVGA, testHardKeyboard 메서드를 갖고 있다.
- IntegrationTests : testActivityProvider 메서드를 갖고 있다.
- InstrumentataionTestRunner를 사용한다.
'Mobile > Android' 카테고리의 다른 글
[Android Studio] 기본 (0) | 2014.03.07 |
---|---|
Hello, Testing (0) | 2014.03.07 |
Data backup (0) | 2014.02.19 |
[Android]화면 밝기 관련 (0) | 2014.02.10 |
Testing. Eclipse with ADT (0) | 2014.02.07 |
- Total
- Today
- Yesterday
- intellij
- Windows
- go
- enum
- php
- git
- cocoapods
- github
- docker
- MySQL
- war
- golang
- Kotlin
- Python
- CentOS
- SWIFT
- nodejs
- Spring
- tomcat
- Linux
- rxswift
- Codable
- Gradle
- android
- Xcode
- ubuntu
- Java
- centos8
- windows10
- ios
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |