유닛 테스트란?
소프트웨어 개발에서 가장 작은 단위의 코드를 독립적으로 테스트하는 접근 방법이다.
함수, 클래스, 메서드등과 같이 작은 코드 조각을 테스트하여 코드의 동작을 확인하고 검증하는 프로세스이다.
유닛 테스트를 하는 목적은 아래와 같다.
- 코드의 정확성 확인: 메서드의 입력과 예상되는 출력을 기반으로 테스트 케이스를 작성하고 실행함으로써 코드의 정확성 검증
- 버그 탐지: 코드의 작은 부분을 테스트하면서 예기치 못한 동작이나 예외 상황 또는 버그를 찾아낼 수 있다.
- 코드의 유연성 향상: 작은 단위로 테스트 코드를 작성하면 코드의 결합도가 낮아지고 모듈화된 구조를 가지게 된다.
Junit?
Junit은 자바를 위한 테스팅 프레임워크이다.
안드로이드에서 유닛 테스트를 수행할 때 가장 범용적으로 사용되는 프레임워크이기도 하다.
이외에도 Mockito, Robolectric, Espresso 등 여러가지 프레임워크가 있다.
Junit은 Kotlin과 Java를 모두 지원할 뿐만 아니라 간결하고 직관적인 문법을 제공해 사용하기 쉽다.
또한 오랜 기간 동안 많은 개발자들에 의해 사용되어 왔기 때문에 안정성과 신뢰성이 검증된 프레임워크이기도 하다.
위와 같은 이유로 위 라이브러리들 중 대표적으로 Junit을 이용한 안드로이드 유닛 테스트를 알아보자.
Junit을 이용한 단위 테스트
안드로이드 스튜디오에서 프로젝트를 생성하면 자동으로 테스트 관련 툴이 추가된다.
app 수준의 build.gradle 파일에서 의존성을 살펴보면 아래와 같이 되어 있음을 확인할 수 있다.
사용 방법
프로젝트를 생성하면 자동으로 androidTest 디렉토리 안에 ExampleUnitTest 파일이 생성된다.
해당 파일을 보면 아래와 같이 작성되어 있음을 확인할 수 있다.
ExampleUnitTest.kt
class ExampleUnitTest {
@Test
fun addition_isCorrect() {
assertEquals(4, 2 + 2)
}
}
@Test 어노테이션을 붙이면 해당 메서드가 테스트 메서드임을 명시할 수 있다.
Junit은 @Test 어노테이션이 붙은 메서드를 테스트 실행 대상으로 인식하고 실행하게 된다.
assertEquals() 메서드는 Junit 프레임워크에서 제공하는 메서드로, 두 값이 동일한지를 비교하는데 사용된다.
해당 코드가 올바르게 동작하면 문제가 없지만 올바르게 동작하지 않는다면 AssertionError를 throw 한다.
테스트 코드는 Line number 옆에 보이는 실행 버튼을 누르면 된다.
또는 아래 그림과 같이 Test 파일 우클릭 후 실행 버튼을 누르면 된다.
테스트 코드 작성 예제
import com.google.common.truth.Truth.assertThat
import org.junit.Test
class EmailValidatorTest {
@Test
fun emailValidator_CorrectEmailSimple_ReturnsTrue() {
assertThat(EmailValidator.isValidEmail("name@email.com")).isTrue()
}
}
기본 어노테이션
- @Test
-> 테스트를 만드는 모듈 역할 - @DisplayName
-> 테스트 클래스 또는 테스트 메서드의 사용자 정의 표시 이름을 정의 - @ExtendWith
-> 사용자 정의 확장명을 등록하는데 사용 - @BeforeEach
-> 각 테스트 메서드 전에 실행됨을 나타냄 - @AfterEach
-> 각 테스트 메서드 후에 실행됨을 나타냄 - @BeforeAll
-> 현재 클래스의 모든 테스트 메서드 전에 실행됨을 나타냄 - @AfterAll
-> 현재 클래스의 모든 테스트 메서드 후에 실행됨을 나타냄 - @Disable
-> 테스트 클래스 또는 메서드를 비활성화
단정 메서드
- assertArrayEquals(a, b)
-> 배열 A와 B가 일치함을 확인 - assertEquals(a, b)
-> 객체 A와 B가 같은 값을 가지는지 확인 - assertEquals(a, b)
-> 객체 A와 B 값이 일치함을 확인 (a: 예상값, b: 결과값, c: 오차범위) - assertSame(a, b)
-> 객체 A와 B가 같은 객체임을 확인 - asserTrue(a)
-> 조건 a가 참인지 확인 - assertNotNull(a)
-> 객체 A가 null이 아님을 확인
'Android' 카테고리의 다른 글
Android - Image Preloading Trouble Shooting (1) | 2023.12.30 |
---|---|
안드로이드 - Jetpack Compose Navigation Test Code (0) | 2023.12.30 |
Android - GitHub에 API Key, Hash 값 숨기기 (0) | 2023.01.05 |
안드로이드 - csv 파일 읽기 (0) | 2022.11.21 |
Android - 아키텍쳐 패턴 (MVVM) (3) | 2022.09.22 |