Kotlin ‐ 단위 테스트를 작성하라[Effective Kotlin Item 9] - woojin-playground/Backend-PlayGround GitHub Wiki

단위 테스트를 작성하라

  • 단위 테스트에서는 일반적으로 다음과 같은 내용을 확인한다.
    • 일반적인 유스 케이스 : 해당 요소가 사용될거라 예상되는 일반적인 방법을 테스트한다.
    • 일반적인 에러 케이스 또는 잠재적인 문제들 : 제대로 동작하지 않을거라고 예상되거나 문제가 있는 것으로 밝혀진 사례를 테스트한다.
    • 엣지 케이스와 잘못된 인수들 : Int의 경우 Int.MAX_VALUE같은 매우 큰 수를 확인한다. 널 가능 타입의 경우 null이나 null값으로 채워진 객체를 확인한다.
  • 단위 테스트는 구현된 요소가 동작하는 방식에 대한 빠른 피드백을 주기 때문에 개발하는 동안 매우 유용할 수 있다.
  • 단위 테스트의 가장 큰 장점은 다음과 같다.
    • 테스트가 제대로 된 요소들을 더 신뢰할 수 있다 : 요소들에 대해 테스트가 제대로 된 경우 해당 요소들을 사용할 때, 더 자신있게 작업할 수 있다.
    • 요소가 제대로 테스트되면 리팩토링하는 것이 두렵지 않다 : 테스트를 거치지 않은 프로그램들의 경우 개발자들은 레거시 코드를 건드리는 것을 두려워한다. 실수로 오류를 발생시킬 수 있고, 심지어 그것을 알지 못할수도 있기 때문이다.
    • 수동으로 테스트하는 것보다 단위 테스트를 통해 확인하는 것이 더 빠를 수 있다 : 피드백 루프가 빨라지면서 개발 속도가 빨라지고 즐겁게 개발할 수 있다. 또한 버그 수정 비용을 줄이는 데 도움이 된다. 버그를 더 빨리 발견할수록 수정하는 비용을 더 줄일 수도 있다.
  • 물론 단위 테스트는 다음과 같은 단점들도 있다.
    • 단위 테스트는 작성하는데 시간이 걸린다 : 장기적으로 보면 좋은 단위 테스트는 시간을 절약시켜 준다. 나중에 디버깅하거나 버그를 찾는 데 소요되는 시간을 줄여 주기 때문이다. 또한 단위 테스트를 실행하는 것이 수동 테스트나 다른 종류의 자동화된 테스트보다 훨씬 빠르기 때문에 많은 시간을 절약할 수 있다.
    • 코드를 테스트 가능하도록 수정해야한다 : 이런 작업이 쉽진 않지만 훌륭하고 안정적인 아키텍처를 사용하도록 강제하는 역할을 한다.
  • 좋은 단위 테스트를 작성하는 것은 어렵다.
  • 잘못 작성된 단위 테스트는 득보다 실이 많을 수 있다.
  • 단위 테스트 대상을 고려할 때는 다음 사항에 중점을 두어야 한다.
    • 복잡한 기능
    • 시간이 지나면서 변경될 가능성이 있고 리팩토링될 부분
    • 비즈니스 로직
    • 공개 API 일부
    • 문제가 자주 발생할 가능성이 있는 부분
    • 우리가 수정한 프로덕션 버그