계측 단위 테스트 만들기

계측 단위 테스트는 물리적 기기나 에뮬레이터에서 실행하는 테스트입니다. 여기서 안드로이드 프레임워크 API와 안드로이드 테스트 서포트 라이브러리와 같은 서포트 API를 사용할 수 있습니다. 계측테스트는 오로지 계측 정보(예를 들면 Context와 같은)가 필요하거나, 안드로이드 프레임워크 구성요소를 실제 사용하는 것이 필요할 때 (예를 들면 Parcelable 또는 SharedPreferences 객체)만 사용합니다.

계측 단위테스트는 또한 목 객체를 만들고 유지하는 노력을 줄여줍니다.원한다면 의존성을 시뮬레이팅하기 위해 목 프레임워크를 계속 사용해도 좋습니다.

테스트 환경 구성하기

안드로이드 스튜디오 프로젝트에서, 계측 테스트는 module-name/src/androidTest/java/에 저장합니다. 이 디렉토리는 프로젝트를 만들 때 미리 생성되며 예제 계측 테스트를 가지고 있습니다.

시작하기 전에 안드로이드 테스트 서포트 라이브러리를 받고 설치해야합니다. 이 라이브러리는 빠르게 앱에 대한 테스트 코드를 만들고 실행하도록 해주는 API를 가지고 있습니다. 테스트 서포트 라이브러리는 JUnit 4 테스트 러너(AndroidJUnitRunner)와 기능 UI 테스트를 위한 API를 (Espress와 UI Automator)를 가지고 있습니다.

테스트 서포트 라이브러리에서 제공하는 테스트 러너와 규칙 API를 사용하기 위해서는 또한 안드로이드 의존성을 프로젝트에 주입해야합니다. 테스트 개발과정을 간소화하기 위해서, Hamcrest 라이브러리를 추가하기를 권합니다. 이것의 Hamcrest matcher API를 사용해 유연한 어설트문을 구현할 수 있습니다.

최고위 build.gradle 파일에 라이브러리를 의전성으로 추가하십시오.

dependencies{
    androidTestCompile 'com.android.support:support-annotations:24.0.0'
    androidTestCompile 'com.android.support.test:runner:0.5'
    androidTestCompile 'com.android.support.test:rules:0.5'
    // Optional -- Hamcrest library
    androidTestCompile 'org.hamcrest:hamcrest-library:1.3'
    // Optional -- UI testing with Espresso
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
    // Optional -- UI testing with UI Automator
    androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2'
}}

주의: 만약에 support-annotations라이브러리와 espress-core를 위해 androidTestCompile 의존성을 함께 구성한다면, 의존성 충돌로 빌드가 실패하게 될겁니다. 이를 해결하기 위해서 아래와 같이 espress-core를 업데이트 하십시오

androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
})

JUnit 4 테스트 클래스를 사용하기 위해서 기본 실행 러너로 AndroidJUnitRunner를 특정하십시오. app 모듈 수준의 build.gardle 파일에 추가하면 됩니다.

android {
    defaultConfig {
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
}
Creat

계측 단위 테스트 클래스 만들기

단위 테스트 클래스는 반드시 JUnit 4 테스트 클래스로 작성합니다. JUnit4 테스트 클래스를 만들고 JUnit4 어설트와 어노테이션을 사용하는 방법은 지역 단위 테스트 클래스 만들기 를 참조해주십시오.

계측 JUnit4 테스트 클래스를 만들기 위해서는 @RunWiht(AndroidJUnit4.class)를 테스트 클래스 선언문 앞에 추가해야합니다. 또한 안드로이드 테스트 서포트 라이브러리의 AndroidJUnitRunner 클래스를 기본 테스트 러너로 설정해야합니다. 이 과정은 테스트 시작하기에 설명되어 있습니다.

아래의 예는 Parcelable 인터페이스를 구현한 LogHistory 클래스를 계측 테스트 하는 방법을 보여줍니다.

import android.os.Parcel;
import android.support.test.runner.AndroidJUnit4;
import android.util.Pair;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.util.List;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;

@RunWith(AndroidJunit4.class)
@SmallTest
public class LogHistoryAndroidUnitTest{
    public static final String Test_STRING = "This is a string";
    public static final long TEST_LONG = 12345678L;

    @Before
    public void createLogHistory(){
        mLogHistory = new LogHistory();
    }

    @Test
    public void logHistory_ParcelableWriteRead(){
        mLogHistory.addEntry(TEST_STRING,TEST_LONG);
        //데이터 작성
        Parcel parcel = Parcel.obtain():
        mLogHistory.writeToParcel(parcel,mLogHistory.describeContents());
        //데이터 작성후에 초기화하기
        parcel.setDataPosition(0);
        //데이터 읽기
        LogHistory createdFromParcel = LogHistory.CREATOR.createFromParcel(parcel);
        List<Pair<String, Long>>createdFromParcelData = createdFromParcel.getData();

        //테스트 확인하기
        assertThat(createdFromParcelData.size(),is(1));
        assertThat(createdFromarcelData.get(0)).first,is(TEST_STRING));
        assertThat(createdFromParcelData.get(0)).second,is(TEST_LONG));
    }
}

테스트 스위트 만들기

계측 테스트 들을 정리하기위해서 테스트 클래스를 테스트 스위트 클래스로 그룹 짓고 함께 실행할 수 있습니다. 테스트 스위트는 내포될 수 있습니다. 이 말은 테스트 스위트가 다른 테스트 스위트에 들어갈 수 있고 해당 스위트를 구성하는 테스트 클래스들이 실행시 모두 함께 실행될 수 있음을 의미합니다.

테스트 스위트는 테스트 페키지에 들어가 있습니다. 일반적으로 이 테스트 스위트의 페키지 이름은 .suite라는 접미사를 가지고 있습니다. (com.example.android.testing.mysample.suite).

테스트 스위트를 만들기 위해서 JUnit의 RunWith과 Suite 클래스를 임포트 해야합니다. 테스트 스위트 안에서 @RunWith(Suite.class)와 @Suite.Suite..SuiteClasses()어노테이션을 추가하십시오. @Suite.Suite.classes()어노테이션에서는 테스트 스위트에 들어가는 개별 테스트 클래스를 나열해 적어주면 됩니다.

아래의 예제는 어떻게 UnitTestSuite라는 테스트 스위트가 CalculatorImstrumentationTest와 CalculatorAddParameterizedTest 테스트 클래스를 그룹 짓는지 보여줍니다.

import com.example.android.testing.mysample.CalculatorAddParameterizedTest;
import com.example.android.testing.mysample.CalculatorInstrumentationTest;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;

// Runs all unit tests.
@RunWith(Suite.class)
@Suite.SuiteClasses({CalculatorInstrumentationTest.class,
        CalculatorAddParameterizedTest.class})

계측 단위 테스트 실행하기

계측 테스트를 실행하기 위해서 아래의 과정을 진행하십시오:

  1. 프로젝트가 그래들과 싱크되었는지 확인하기위해 툴바의 Sync Project를 클릭하십시오
  2. 테스트를 아래의 방법들 중 하나로 실행하십시오.
    1. 하나의 테스트를 실행하기 위해서 Project 윈도우를 열고 테스트에 오른쪽 클릭을 한 뒤 Run을 클릭하십시오
    2. 모든 클래스의 메소드를 테스트 하기 위해서, 클래스나 메소드에 우클릭을 하신 후 Run을 클릭하십시오
    3. 디렉토리 내 모든 테스트를 실행하기 위해서 디렉토리를 우클릭 한 후 Run을 실행하십시오

안드로이드 그래들 플러그인은 기본 렉토리인 src/androidTest/java에 계측 테스트 코드를 컴파일 하고 테스트 APK와 제픔 APK를 빌드합니다 그리고 두 APK를 모두 연결된 기기나 에뮬레이터에 설치합니다. 설치후 테스트를 하고 테스트 결과를 Run 윈도우에 표시합니다.

알림: 계측 테스트를 실행하거나 디버깅ㅏ는 동안 안드로이드 스튜디오는 인스턴스 런을 위한 메소드를 추가하지 않습니다. 그리고 해당 기능을 끕니다.

파이어베이스 테스트 랩으로 테스트 실행하기

파이어베이스 테스트 랩을 사용해서 동시에 많은 대중적인 안드로이드 기기와 기기 구성사항(locale, orientation, screensize, and platform version)에서 테스트를 실행할 수 있습니다. 이 테스트들은 구글 데이터 세터의 물리적 또는 가상기계를 통해 실행됩니다. 안드로이드 스튜디오에서 바로 테스트 랩을 띄우거나 커맨드 라인에서 사용할 수있습니다. 테스트 결과는 테스트 로그를 만들어내며 모든 앱의 실패의 세부 사항을 포함합니다.

파이어베이스 테스트 랩을 사용하기 전에, 구글 아이디와 파이어베이스 프로젝트가 없다면, 아래의 과정을 진행해야 합니다.

  1. 구글 계정을 만듭니다.
  2. 파이어베이스 콘솔에 가서 새 프로젝트를 만듭니다. 스파크 플랜의 일 무료 한도 내에서 테스트랩을 사용한다면 요금이 부가되지 않습니다.

테스트 메트릭스 구성과 테스트 실행하기

안드로이드 스튜디오는 통합된 도구를 제공해 테스트를 파이어베이스 테스트 랩에서 어떻게 진행할지 정할 수 있도록 해줍니다. 파이어베이스 프로젝트를 블레이즈 플랜으로 만든 후에 테스트구성을 만들고 테스트를 하 수 있습니다.

  1. Run>Edit Configurations를 메인메뉴에서 클릭합니다.
  2. Add New Configuration을 클릭하고 Android Tests를 선택합니다.
  3. 안드로이드 테스트 구성 다이얼로그(Android Test Configuations) 에서:
    1. 테스트의 구체 사항을 입력합니다. 예를 들면 테스트 이름, 모듈 타입, 테스트 타입 그리고 테스트 종류가 그렇습니다.
    2. Deployment Target OPtions의 Target 드롭 다운 메뉴에서 Firebase Test Lab Device Matrix를 선택합니다.
    3. 로그인 한 상태가 아니라면, Google Cloud Platform에서 AndroidStudio 접근을 허용하십시오.
    4. Cloud Project 옆에 을 클릭하고 파이어베이스 프로젝트를 리스트에서 선택합니다
  4. 테스트 구성과 테스트 메트릭스 만들기
    1. Matrix Configuration 드롭다운 리스트 옆에 Open Dialog를 클릭하십시오.
    2. Add New Configuration(+)를 선택하십시오
    3. Name 에 새 구성의 이름을 입력하십시오.
    4. 기기, 안드로이드 버전, 지역 정보, 스크린 방향을 선택해 테스트를 수행하고 싶은 환경을 구성하십시오 . 파이어베이스 테스트 랩은 선택한 사항의 모든 조합에 대해서 테스트를 수행하고 결과를 만듭니다.
  5. Ok로 Run/Debug configurations 다이얼로그를 나갑니다.
  6. Run으로 테스트를 실행합니다.

테스트 결과 분석하기

파이어베이스 테스트 랩이 테스트 수행을 완료하면 Run 윈도우가 열리고 결과를 보여줍니다. 아래 그림에서 보여지는 것처럼 Show Press를 클릭해 테스트 수행사항을 볼 수 있습니다.

웹에서 수행된 테스트 상단에 표시된 링크를 딸아가 테스트 결과를 분석할 수도 있습니다. 이에 관한 더 자세한 사항은 파이어베이스 테스트 랩 안드로이드 결과 분석하기를 확인하십시오.

results matching ""

    No results matching ""