본문 바로가기
개발/Java, Kotlin

[Effective Kotlin] Item 10: Write unit tests

by 달사쿠 2021. 8. 12.
반응형

Intro

코드를 더 안전하게 만드는 궁극적인 방법: 다양한 종류의 테스트를 사용하는 것

일반적인 테스트: 사용자 관점에서 애플리케이션이 올바르게 작동하는지 확인

  • 애플리케이션 외부에서 올바르게 작동하는 것이 목표
  • 충분한 수의 tester를 처리
  • 개발자에게 유용하지만 불충분함 => 단위테스트가 필요한 이유
    • 시스템의 구체적인 element들의 올바른 작동을 보장하지 못함
    • 개발 중에 더 빠른 피드백을 제공하지 못함

 


단위 테스트 (Unit test)

구현된 elements의 작동방식에 대해서 빠른 피드백을 제공하기 때문에 개발중에 유용함

테스트는 누적되므로 regression에 있어서도 쉽게 확인 가능

수동으로 테스트하기 어려운 사례도 확인가능*TDD(Test Driven Development)방식에서는 단위테스트를 먼저 작성 후 이를 충족하는 구현체를 개발

단위테스트에서 체크되어야하는 것들

Common use cases

  • 일반적으로 우리가 해당 요소를 사용할 때 기대되는 결과에 대한 검증
  • 아래의 예제와 같이 함수가 몇개의 테스트에 대해서 잘 작동하는지 검증
@Test
fun `fib works correctly for the first 5 positions`() {
	assertEquals(1, fib(0))
    assertEquals(1, fib(1))
    assertEquals(2, fib(2))
    assertEquals(3, fib(3))
    assertEqauls(5, fib(4))
}

Common error cases or potential problems

  • 올바르게 동작하지 않거나 과거게 문제가 있었던 것으로 나타났던 사례 검증

Edge-cases and illegal arguments

  • Intwe의 경우, Int.MAX_VALUE와 같은 큰 숫자 검증
  • nullable object의 경우, null이거나 null로 채워진 개체 검증
  • 음수에 대한 fibonacci ...

 

단위테스트의 장점

  • 잘 테스트된 elements가 더 안정적이어서, 자신감을 가지고 개발할 수 있다!
  • elements가 제대로 테스트되면 리팩토링하는 것도 두렵지 않다!
  • 수동으로 확인하는 것보다 단위테스트를 사용해 올바르게 작동하는지 확인하는 것이 빠른 경우가 많다. (피드백이 빨라 개발자가 대처하기 쉬움)

 

단위테스트의 단점

  • 단위테스트를 작성하는데 시간이 걸린다. 장기적으로는 좋은 단위테스트를 작성한 경우, 디버깅하고 버그를 찾는데 적은 시간을 할애하므로 시간을 절약할 수 있음
  • 테스트가 가능하도록 코드를 조정해야한다.
  • 좋은 단위 테스트를 작성하는 것은 어렵기 때문에, 개발 이외의 부분과 마주하는 기술과 이해가 필요하다. TDD를 공부하세요!

 

반응형

댓글