Study Record

[안드로이드] 간단한 단위 테스트 실행해보기 본문

안드로이드

[안드로이드] 간단한 단위 테스트 실행해보기

초코초코초코 2023. 7. 18. 21:00
728x90

😶 단위 테스트

단위 테스트는 작은 코드 조각을 직접 테스트하여 기능이 제대로 작동하는지 확인하는 것이 단위 테스트이다. 함수, 클래스, 속성을 데스트할 수 있고 자바 가상 머신에서 실행되므로 기기나 애뮬레이터가 필요하지 않은 개발 환경에서 실행된다. 

 

테스트에 필요한 앱의 코드만 호출하고 코드 호출의 결과로 생긴 코드의 값이나 상태를 테스트한다. UI 테스트는 사용자 인터페이스의 예상 상태만 테스트한다. 

 

 

😶 단위 테스트 디렉터리 만들기

 

단위 테스트는 위 그림과 같이 (test) 디렉터리에서 진행한다. 만약 이 디렉터리가 존재하지 않는다면 다음과 같은 과정으로 새로 생성할 수 있다.

 

 

먼저, 프로젝트 단위를 Android 에서 Project 로 변경한 뒤 app/src 경로에 새로운 디렉터리를 만든다.

 

 

 

새로운 디렉터리 이름을 test\java 로 선택하고 디렉터리를 만든다.

 

 

 

만든 test/java 디렉터리에 프로젝트 패캐지를 생성하는데 만약 프로젝트 패키지 이름이 com.example.test 라면 test/java 디렉터리에 생성할 패키지 이름도 com.example.test 로 한 뒤, 다시 프로젝트 단위를 Android 로 바꾸면 (test) 디렉터리가 생성된 것을 볼 수 있다.

 

 

😶 단위 테스트 종속

dependencies {
    testImplementation 'org.mockito:mockito-core:3.12.4'
    testImplementation 'junit:junit:4.13.2'
}

 

 

😶 간단한 단위 테스트 코드 작성하기

 

1. 앱 소개

RecyclerView 를 포함한 단일 목록을 가지고 있는 앱이다. RecyclerView 에 들어가는 항목들은 정적인 데이터로 이루어져 있다. RecyclerView 에서 사용하는 데이터 항목들의 개수가 올바른지 테스트하는 단위 테스트를 작성한다.

 

 

 

 

2. 테스트 코드 작성하기

테스트 코드는 단위 테스트 디렉터리 아래의 새로운 클래스를 만들어 진행한다.

import android.content.Context
import com.example.test2.adapter.SnackAdapter
import com.example.test2.model.Snack
import org.junit.Assert.assertEquals
import org.junit.Test
import org.mockito.Mockito.mock

class AdapterTest {

    val context = mock(Context::class.java)

    @Test
    fun adapter_size() {
        val data = listOf<String>(
            "apple",
            "happy"
        )

        val adapter = SnackAdapter(context, data)
        assertEquals("어댑터 크기가 맞지 않습니다.", data.size, adapter.itemCount)
    }
}

단위 테스트를 진행하면서 context 가 필요한 경우가 있는데 그럴 때 mock 로 Context 를 가져올 수 있는데 단위 테스트가 실제 기기가 아닌 JVM 에서 실행되기 때문에 실제 기능은 없는 "모의 인스턴스" 를 만들 수 있다.

assertEquals() 메서드로 어댑터의 항목 크기와 실제 데이터의 크기를 비교하여 테스트할 수 있다.

 

 

 

3. 실제 테스트하기

실제로 테스트할 때는 AdapterTest 클래스 옆의 Run 버튼을 눌러 실행한다.

728x90