IMCAT.DEV
로그인 가입
Kotlin 입문 테스트

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"라는 메시지가 나타납니다.
  • 코드 한 줄씩 동작 설명

    1. fun add(a: Int, b: Int): Int { ... } : 두 개의 정수를 더하는 함수를 정의합니다.
    2. class MathTests { ... } : 테스트를 위한 클래스를 정의합니다.
    3. @org.junit.Test : 이 메소드가 테스트 메소드임을 JUnit에 알립니다.
    4. assert(add(2, 3) == 5) : add 함수를 호출하여 결과가 5인지 확인합니다.
    5. 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")) // 잘못된 비밀번호
          }
      }

      5. 흔한 실수와 주의사항

      실수 1: 테스트 코드의 누락

    6. 잘못된 코드: 테스트를 작성하지 않고 배포.
    7. 올바른 코드: 모든 주요 기능에 대해 테스트를 작성.
    8. 실수 2: assert 사용법을 잘못 이해

    9. 잘못된 코드: assert(add(2, 3) == 6) (잘못된 결과)
    10. 올바른 코드: assert(add(2, 3) == 5) (정확한 결과)
    11. 실수 3: 테스트 환경 설정 부족

    12. 잘못된 코드: JUnit 라이브러리를 추가하지 않음.
    13. 올바른 코드: Gradle 또는 Maven을 통해 JUnit 라이브러리를 추가.
    14. 6. 정리

    15. 테스트는 코드의 신뢰성을 높이는 중요한 과정입니다.
    16. 단위 테스트는 코드의 작은 단위를 검증합니다.
    17. 항상 테스트를 작성하여 배포 전 코드의 안정성을 확인해야 합니다.
    18. 다음에 학습하면 좋은 주제: 통합 테스트, 테스트 주도 개발 (TDD), Mockito를 이용한 Mocking.