본문 바로가기
Android/기본

[Android] Android 자동 테스트 작성 및 유형

by LoseyKim 2024. 9. 6.

자동 테스트는 앱의 기능을 검증하고 코드 변경 후에도 안정적으로 동작하는지 확인하는 중요한 과정이에요. Android에서는 로컬 테스트계측 테스트라는 두 가지 주요 테스트 유형을 사용할 수 있습니다. 이 두 가지 테스트의 차이점과 작성 방법을 아래에서 설명해볼게요.


1. 자동 테스트 유형

로컬 테스트

로컬 테스트는 개발자의 컴퓨터(워크스테이션)에서 실행되며, 소규모 코드의 정확성을 검증하는 데 사용돼요. 함수, 클래스, 속성 등의 작은 단위에서 발생할 수 있는 버그를 빠르게 확인할 수 있습니다.

특징

  • 함수, 클래스, 속성 등 소규모 코드 단위 테스트
  • Android 스튜디오에서 로컬 테스트를 자동으로 실행 가능
  • 빠른 피드백과 간편한 실행 환경 제공

계측 테스트

계측 테스트는 UI 상호작용을 포함한 앱의 실제 환경에서의 동작을 검증하는 테스트예요. 기기나 에뮬레이터에서 앱이 어떻게 반응하는지 시뮬레이션하여 확인할 수 있습니다.

특징

  • 실제 기기 또는 에뮬레이터에서 실행
  • 앱의 UI 동작과 사용자 상호작용 테스트
  • 테스트를 위한 별도의 APK 생성 및 설치

2. 로컬 테스트 작성하기

앱 코드 준비

로컬 테스트를 작성하려면 테스트할 메서드가 공개적으로 접근 가능해야 해요. 만약 `private` 메서드가 있다면 이를 `internal`로 변경하거나, `@VisibleForTesting` 주석을 추가하여 테스트 목적으로만 접근할 수 있게 할 수 있어요.

예시

@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
fun calculateTotal(price: Int, quantity: Int): Int {
    return price * quantity
}

테스트 메서드는 `@Test` 주석을 붙이고, 예상 결과를 어설션을 통해 확인해요.

테스트 디렉터리 생성

로컬 테스트는 `test/java` 디렉터리에 작성돼요.

  1. 프로젝트 뷰에서 src 디렉터리를 마우스 오른쪽 클릭
  2. `New > Directory`를 선택하고 `test/java` 디렉터리를 생성
  3. `test/java` 디렉터리에서 앱 코드와 동일한 패키지명으로 패키지를 생성

테스트 클래스 만들기

  1. `test/java` 디렉터리에서 새로운 Kotlin 클래스 또는 파일을 생성
  2. 생성된 클래스 안에 테스트 메서드를 작성

테스트 코드 작성

로컬 테스트는 앱의 특정 함수가 올바르게 동작하는지 확인하는 간단한 테스트예요. 테스트할 메서드에 대해 직접 호출하고, 반환 값이 예상 값과 일치하는지 확인하는 어설션을 사용해요.

예시

class ExampleUnitTest {
    @Test
    fun addition_isCorrect() {
        assertEquals(4, 2 + 2)
    }
}

테스트 실행

테스트 클래스나 개별 테스트 함수의 왼쪽에 나타나는 화살표를 클릭해 테스트를 실행할 수 있어요. 클래스 단위로 모든 테스트를 실행하거나, 개별 테스트 메서드를 실행할 수 있어요.


3. 계측 테스트 작성하기

계측 디렉터리 생성

계측 테스트는 `androidTest/java` 디렉터리에 작성돼요.

  1. 프로젝트 뷰에서 `src` 디렉터리를 마우스 오른쪽 클릭
  2. `New > Directory`를 선택하고 `androidTest/java` 디렉터리를 생성
  3. `androidTest/java` 디렉터리에서 앱 코드와 동일한 패키지명으로 패키지를 생성

테스트 클래스 만들기

  1. `androidTest/java` 디렉터리에서 새로운 Kotlin 클래스 또는 파일을 생성
  2. UI 테스트나 계측 테스트 코드를 작성할 클래스 이름을 지정해 생성

테스트 코드 작성

계측 테스트는 UI 상호작용을 테스트하는 데 주로 사용돼요. 사용자가 화면에서 버튼을 클릭하거나 텍스트를 입력하는 등의 행동을 시뮬레이션하고, 그에 대한 앱의 반응을 테스트해요.

예시

@RunWith(AndroidJUnit4::class)
@LargeTest
class MainActivityTest {

    @Rule
    @JvmField
    var activityRule = ActivityTestRule(MainActivity::class.java)

    @Test
    fun testButtonClick() {
        // 버튼을 클릭하는 동작을 시뮬레이션
        onView(withId(R.id.button)).perform(click())

        // 버튼 클릭 후 텍스트가 변경되는지 확인
        onView(withId(R.id.textView))
            .check(matches(withText("Button clicked")))
    }
}

이 테스트는 사용자가 버튼을 클릭했을 때 화면에 나타나는 결과가 예상대로 변경되는지 확인하는 간단한 UI 테스트예요.

테스트 실행

계측 테스트는 기기나 에뮬레이터에서 실행돼요. Android 스튜디오에서 `androidTest` 디렉터리 내에 작성된 테스트를 실행하면 기기에 테스트 APK가 설치되고, 앱이 실행된 상태에서 테스트가 수행돼요.