https://seedpotato.tistory.com/276
이전에 책을 보다 보니 단위 테스트를 주제로 책의 내용이 진행되었습니다. 그 부분을 다 읽고 난생각은 단위테스트 어떻게 작성해야 되는가입니다. 단위 테스트가 좋은 것을 책을 봐서 알고 있습니다. 그렇다면 단위 테스트를 작성하는 문법과 양식은 무엇이고 실습을 해보며 포스팅을 진행해 보겠습니다.
코틀린의 단위 테스트를 작성하고 실행하는 가장 일반적인 방법은 JUnit을 사용하는 것입니다. JUnit은 Java의 유명한 테스팅 프레임워크로, 자바기반으로 만들어진 코틀린과도 완벽하게 호환됩니다.
class ExampleUnitTest {
@Test
fun addition_isCorrect() {
assert(4 == 4)
assertEquals(4, 2 + 2)
}
}
기본적으로 프로젝트를 만들면 이렇게 단위 테스트할 수 있는 파일이 생성됩니다.
이 코드들을 해석하며 간단히 Test코드가 무엇인지 알아봅시다.
@Test 어노테이션 => 해당 메서드가 테스트 메서드임을 나타내며, JUnit에서 이 메서드를 테스트로 실행합니다.
assert 함수 => 인자로 넣어진 값이 참인지 체크합니다. 참이 아니라면 AssertionError를 throw 합니다.
assertEquals 함수 => 인자로 넣어진 값들이 같은지 체크합니다. 같지 않다면 AssertionError를 throw 합니다.
이처럼 해당 공간에서는 단위테스트를 진행하여 값들을 확인하고 검사등을 할 수 있습니다.
위함수 말고도 여러 함수들을 알아봅시다
//assertEquals: 예상 값과 실제 값을 비교하여 동일한지 확인합니다.
assertEquals(expected, actual)
//assertTrue / assertFalse: 주어진 조건이 참인지 또는 거짓인지 확인합니다.
assertTrue(condition)
assertFalse(condition)
//assertNull / assertNotNull: 주어진 값이 null인지 또는 null이 아닌지 확인합니다.
assertNull(value)
assertNotNull(value)
//assertSame / assertNotSame: 주어진 두 값이 같은 객체인지 또는 다른 객체인지 확인합니다.
assertSame(expected, actual)
assertNotSame(expected, actual)
//fail: 테스트를 명시적으로 실패로 표시하고 실패 원인 메시지를 제공합니다.
fail(message)
//assertThrows: 특정 예외가 발생하는지 확인합니다.
assertThrows(expectedExceptionClass) {
// 예외가 발생할 코드
}
//assertTimeout: 특정 시간 안에 작업이 완료되는지 확인합니다.
assertTimeout(timeoutMillis) {
// 시간 제한 안에 완료되어야 할 작업
}
//assertAll: 여러 개의 검증을 한 번에 실행하고 모두 성공하는지 확인합니다.
assertAll("Multiple assertions",
{ assertEquals(1, someValue) },
{ assertTrue(someCondition) },
{ assertNotNull(someObject) }
)
이밖에 JUnit 말고도 단위테스트를 지원하는 여러 라이브러리들도 있습니다. 상황에 맞게 사용하면 좋을 것 같습니다. 이제 로컬 환경에서의 단위테스트를 알아보았으니 Instrumented 단위 테스트(android Test)를 알아보도록 합시다.
처음 로컬환경에서의 단위테스트 같은 경우 말 그대로 안드로이드 환경이 아니어도 돌릴 수 있는 코드들입니다. 그렇지만 안드로이드환경에 맞게 개발된 retrofit이나 room 같은 라이브러리의 경우 로컬환경에서는 테스트할 수 없습니다. 그럴 때 필요한 것이 이 Instrumented 단위 테스트(android Test)입니다.
이 Instrumented 단위 테스트(android Test)는 에뮬레이트된 안드로이드 기기에서 실행되므로 위에서 말했던 retrofit이나 room같은 라이브러리를 이용할 수 있는 것입니다. 그래서 Instrumented 단위 테스트(android Test)에서는 UI 컴포넌트와 액티비티, 서비스, 프래그먼트 등과 같은 앱의 컴포넌트를 테스트하는 데 유용합니다.
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class)
class MainActivityInstrumentedTest {
private lateinit var mainActivity: MainActivity
@Before
fun setup() {
// 액티비티 인스턴스를 생성하여 테스트에 사용할 준비를 합니다.
mainActivity = MainActivity()
}
@Test
fun testAddNumbers() {
// 주어진 숫자들의 합이 올바른지 테스트합니다.
val sum = mainActivity.addNumbers(2, 3)
assertEquals(5, sum)
}
}
이러한 방식으로 Instrumented 단위 테스트(android Test)를 할 수 있습니다.
이번 포스팅에서는 단위테스트와 예시코드들을 살펴보면서 단위테스트가 어떻게 동작하는지 알아보았습니다. 단위테스트를 알아보며 느꼈던 점은 그렇게 간단한 것은 아니었습니다. 테스트만 해도 여러 라이브러리들이 있었고 테스트를 이용한 개발 전략등이 있었습니다. 그만큼 공부할 것들이 많았습니다. 다음 포스팅에서는 이렇한내용을 잘 정리해 올려보겠습니다.
'코틀린 > 문법및 라이브러리' 카테고리의 다른 글
[Kotlin] Coroutine Flow 맛보기 (0) | 2023.08.10 |
---|---|
[Kotlin] 여러 종류의 반복문 (0) | 2023.08.04 |
[Kotlin] 교집합(intersect), 합집합(union), 차집합(subtract) (0) | 2023.07.31 |
[Kotlin] Result class 가 뭐지? (0) | 2023.07.26 |
[Kotlin] Contract 로 스마트 케스팅 (0) | 2023.07.18 |