본문 바로가기
Android/Test

Android Test - 2. Local Test

by 안스 인민군 2024. 3. 31.

 

Build.Gradle

아래와 같이 기본으로 아래와 같이 Testing에 관련된 라이브러리가 추가 되어 있다.

이 testImplement와 androidTestImplementation 키워드를 볼 수 있다.

jvm 만으로 수행할 수 있는 로컬 단위 테스트에 사용되는 Dependency 는 testImplement 이고

안드로이드 에뮬레이터나 실기기를 필요로 하는 계측 단위 테스트에 사용되는 Dependency는 androidTestImplementation 이다.

그러므로 이 기본 프로젝트에는 로컬 테스트용으로 JUnit4가 추가되고 계층 테스트용으로 JUnit Extension 그리고 Espresso가 추가되는 것 이다.

여기에 Assertion을 더 읽기 용이하게 해주는 Truth와 테스트를 크기에 따라서 필터링 할 수 있게 하는 Runner를 Local 테스트용으로 추가하자.

    testImplementation "androidx.test.ext:truth:1.4.0"
    testImplementation "androidx.test.runner:1.4.0"

 

TestClass

자 이제 4칙연산을 수행하는 단순한 계산기 클래스를 만들고 이 클래스에 단위 테스트를 해보도록 하자.

먼저 아래는 4칙연산의 클래스이다.

class Calculator {

    fun addition(x: Int, y: Int): Int {
        return x + y
    }

    fun subtraction(x: Int, y: Int): Int {
        return x - y
    }

    fun multiplication(x: Int, y: Int): Int {
        return x * y
    }

    fun division(x: Int, y: Int): Int? {
        try {
            return x / y
        } catch (e: Exception) {
            return null
        }
    }
}

위와 같은 클래스를 만든 후 TestClass를 만들어 보자.

Class에서 오른쪽 클릭 후 Generate 테스트를 선택하면 Create Test 메뉴가 표시 된다.

Junit5는 Jetpack 라이브러리를 100% 호환이 되지 않기 때문에 Junit4를 선택해준다.

OK를 선택하면 이번에는 Choose Destination Directory가 표시가 된다.

테스트 파일이 저장되는 디렉토리는 androidTest랑 unitTest 중에서 고를 수 있는데

로컬 테스트라면 유닛 테스트, 계측 테스트라면 이 안드로이드 테스트 디렉토리에다 저장을 하면 된다.

이 테스트는 안드로이드 의존성이 없는 로컬 테스트이기 때문에 유닛 테스트에다가 저장을 하면 된다.

 

이렇게 하면 CalulatorTest가 만들어지게 되는데 코드는 아래와 같다.

import androidx.test.filters.SmallTest
import com.google.common.truth.Truth
import org.junit.After
import org.junit.Before
import org.junit.Test

@SmallTest // 테스트의 크기를 지정하는 어노테이션
class CalculatorTest {
    //    private val calculator = Calculator()
    private lateinit var calculator: Calculator

    @Before
    fun setUp() { // 테스트를 실행하기 전에 실행되는 함수
        //calculator를 매번 setUp하는 이유는 테스트마다 독립적으로 실행되야 하기 떄문이다.
        calculator = Calculator()
    }

    @After
    fun tearDown() { // 테스트를 실행한 후에 실행되는 함수
        //인스턴스를 삭제하던지 데이터베이스를 닫는 행위를 이 부분에서 하면 된다.
    }

    @Test
    fun `additional function test`() {
        // Given
        val x = 4
        val y = 2

        // When
        val result = calculator.addition(x, y)

        // Then
        Truth.assertThat(result).isEqualTo(6)
    }

    @Test
    fun `subtraction function test`() {
        // Given
        val x = 4
        val y = 2

        // When
        val result = calculator.subtraction(x, y)

        // Then
        Truth.assertThat(result).isEqualTo(2)
    }

    @Test
    fun `multiplication function test`() {
        // Given
        val x = 4
        val y = 2

        // When
        val result = calculator.multiplication(x, y)

        // Then
        Truth.assertThat(result).isEqualTo(8)
    }

    @Test
    fun `division function test`() {
        // Given
        val x = 4
        val y = 0

        // When
        val result = calculator.division(x, y)

        // Then
        Truth.assertThat(result).isEqualTo(123)
    }
}

 


참고

- 냉동코더의 알기 쉬운 Modern Android Development 입문 (Link)

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

Android Test - 3. Instrumented Test  (0) 2024.03.31
Android Test - 1. Basic  (0) 2024.03.31