학습
Kotlin 기본적인 테스트 작성
Kotlin 기본적인 테스트 작성 — 초급
기본적인 테스트 작성
1. 도입 (왜 배워야 하는가)
소프트웨어 개발에서 테스트는 매우 중요한 과정입니다. 실제로, 코드가 의도한 대로 작동하는지를 확인하고, 버그를 조기에 발견하여 수정할 수 있는 수단이 됩니다. 만약 테스트를 하지 않는다면, 나중에 배포 후 사용자가 문제를 발견할 때까지 아무런 조치를 취하지 않게 되어 심각한 문제를 초래할 수 있습니다. 이로 인해 고객의 신뢰를 잃거나, 개발 비용이 증가하게 될 수 있습니다.
2. 핵심 개념 설명
테스트
테스트는 코드의 특정 부분이 의도한 대로 작동하는지 확인하는 과정입니다. 마치 요리를 할 때, 처음 몇 번은 맛을 보면서 조리법을 조정하는 것과 같습니다.
단위 테스트 (Unit Test)
단위 테스트는 코드의 가장 작은 단위인 함수나 메소드를 검증하는 테스트입니다. 요리에서 재료 하나하나의 신선도를 확인하는 과정에 비유할 수 있습니다.
| 용어 | 정의 |
|---|---|
| 테스트 | 코드가 올바르게 작동하는지 확인하는 과정 |
| 단위 테스트 | 코드의 가장 작은 단위를 검증하는 테스트 |
3. 기본 코드 예제
Kotlin에서의 기본적인 단위 테스트를 작성해보겠습니다. 아래 코드는 add라는 함수를 테스트합니다.
// 함수 정의
fun add(a: Int, b: Int): Int {
return a + b
}
// 테스트 코드
class MathTests {
@org.junit.Test
fun testAdd() {
// add 함수의 결과가 5인지 확인
assert(add(2, 3) == 5)
}
}
실행 결과
- 테스트가 성공적으로 실행되면 아무런 출력이 없습니다.
- 실패할 경우 "assertion failed"라는 메시지가 나타납니다.
fun add(a: Int, b: Int): Int { ... }: 두 개의 정수를 더하는 함수를 정의합니다.class MathTests { ... }: 테스트를 위한 클래스를 정의합니다.@org.junit.Test: 이 메소드가 테스트 메소드임을 JUnit에 알립니다.assert(add(2, 3) == 5):add함수를 호출하여 결과가 5인지 확인합니다.- 잘못된 코드: 테스트를 작성하지 않고 배포.
- 올바른 코드: 모든 주요 기능에 대해 테스트를 작성.
- 잘못된 코드:
assert(add(2, 3) == 6)(잘못된 결과) - 올바른 코드:
assert(add(2, 3) == 5)(정확한 결과) - 잘못된 코드: JUnit 라이브러리를 추가하지 않음.
- 올바른 코드: Gradle 또는 Maven을 통해 JUnit 라이브러리를 추가.
- 테스트는 코드의 신뢰성을 높이는 중요한 과정입니다.
- 단위 테스트는 코드의 작은 단위를 검증합니다.
- 항상 테스트를 작성하여 배포 전 코드의 안정성을 확인해야 합니다.
- 다음에 학습하면 좋은 주제: 통합 테스트, 테스트 주도 개발 (TDD), Mockito를 이용한 Mocking.
코드 한 줄씩 동작 설명
4. 실전 활용 예제
예제 1: 쇼핑몰의 장바구니
쇼핑몰에서 장바구니에 아이템을 추가하는 경우, 사용자가 원하는 아이템을 선택하고 장바구니에 올바르게 추가되었는지 확인하는 테스트를 작성할 수 있습니다.
class Cart {
private val items = mutableListOf<String>()
fun addItem(item: String) {
items.add(item)
}
fun getItems(): List<String> {
return items
}
}
class CartTests {
@org.junit.Test
fun testAddItem() {
val cart = Cart()
cart.addItem("사과")
assert(cart.getItems().contains("사과"))
}
}
예제 2: 로그인 기능
사용자가 로그인할 때 올바른 자격 증명을 입력했는지 확인하는 테스트입니다.
class User(val username: String, val password: String)
class AuthService {
private val validUser = User("user", "password")
fun login(username: String, password: String): Boolean {
return validUser.username username && validUser.password password
}
}
class AuthServiceTests {
@org.junit.Test
fun testLogin() {
val authService = AuthService()
assert(authService.login("user", "password")) // 성공적인 로그인
assert(!authService.login("user", "wrongPassword")) // 잘못된 비밀번호
}
}