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 |