단위 테스트(Unit Test)가 뭐길래

dongbin_Shin·2021년 11월 25일
0

Test

목록 보기
4/7
post-thumbnail

Spring 테스트에 대해 공부하다보면 "단위 테스트가 중요하다!"라는 말을 한번쯤은 듣게 된다.
도대체 단위 테스트가 무엇이길래 그렇게 강조를 하는걸까?

단위 테스트(Unit-Test)는요

단위 테스트 : 하나의 기능 또는 메소드 기준, 독립적으로 진행되는 가장 작은 단위의 테스트

  • 하나의 메서드를 위한 테스트
  • Mock, Stub 같은 방법을 이용
  • 메서드의 경계를 제어할 수 있으므로 테스트하고자 하는 관심 대상에만 집중해 테스트할 수 있음

단위 테스트, 그래서 왜 필요한걸까?

실무에서는 거의 대부분 단위 테스트를 작성한다.
통합 테스트는 여러 컴포넌트를 연결해 테스트하기 때문에 컴포넌트가 많아질수록 테스트 시간이 늘어난다.
이외에 단위 테스트는 통합 테스트와 비교하여 많은 장점을 갖고 있다.
하나씩 알아보며 단위 테스트가 왜 필요한지 알아보자.

장점 1: Test 시간, 비용 절감

연관 컴포넌트 제작이 완료되지 않아도 Code Push 가능

프로젝트 크기가 커지면 각 컴포넌트를 개발자별로 개발하는 경우가 많다.

하지만 자신이 개발하는 컴포넌트에서 외부 컴포넌트가 필요할 때,
예를 들어 memberService를 개발하고 있는데 memberTokenService가 필요할 때 외부 컴포넌트가 완성되지 않으면 내 코드가 잘 작동하는 지 확인할 수 없다.

그래서 memberTokenService가 완성되기를 기다렸다가 테스트를 거쳐 비로소 code push가 가능할 것이다.

이에 비해 단위 테스트를 사용하면 Mock 을 이용하여 API문서에 따라 반환 값을 설정할 수 있다.

즉, 가상의 memberTokenService를 만들어 내 코드를 테스트 해볼 수 있으므로 더이상 기다릴 필요가 없어진다.

Mock에 대한 개념은 추후에 좀 더 자세히 알아보자.

장점 2: 새로운 기능 추가 시 수시로 빠르게 테스트 가능

단위 테스트 스위트 이용, 새로운 기능 추가 & 기존 기능 수정에 대해 이전 코드의 정상 동작 검증

단위 테스트는 하나의 기능만을 독립적으로 테스트한다.

그래서 새로운 기능이 추가돼도 이전에 작성한 테스트 코드에는 아무런 영향이 없다.

즉, 새로운 기능이 추가되거나 이전 기능에 수정이 가해질 때 기존에 작성한 기능이 잘 작동하는지 판단할 수 있는 근거가 된다.

장점 3: Class 설계 리펙토링이 일어날 때 정당성 부여

리펙토링 시에 안전성 확보

기능 개발이 완료된 코드에 대해 구조적으로 리펙토링을 하는 일이 빈번하게 발생한다.

이 과정에서 잘 작동하던 기능이 망가지면 우리는 다시 변경된 로직을 찾아야한다.

만약 리펙토링 후에 단위 테스트가 실패한다면,
우리는 기존 로직이 변경됐다는 것을 알아채고 해당 기능에 대한 디버깅을 진행할 수 있다.

장점 4: 구현 코드 품질 향상

개발자가 코드의 효율성을 다시 따져볼 수 있음

단위 테스트를 작성하고 관리하기 위해서는 테스트 자체도 주의깊게 들여보아야 한다.

예를 들어 하나의 단위 테스트가 너무 길거나 복잡하면,
이것은 해당 기능의 코드들이 비효율적으로 작성됐다는 증거이기 때문에 리펙토리를 진행해야 한다.

그것이 아니라면 하나의 테스트에서 많은 기능을 수행하기 때문일 수도 있다.
이 경우에는 테스트 클래스 내부에서의 리펙토링이 필요하다는 뜻이기도 하다.

그래서 우리는..

단위 테스트의 대표적인 장점에 대해 알아보았다.

물론 비즈니스 로직 개발이 급하거나 하는 등의 경우에는 테스트 작성에 부담을 느낄 수 있다.

하지만 조금만 더 길게 보았을 때 더 효율적인 코드를 만들고 유지보수에 들어가는 시간, 비용을 줄이기 위해서 우리는 테스트 코드 작성의 룰을 세우고 단위 테스트를 작성해야 할 필요성이 있다.

Reference

개발자 단위 테스트
단위 테스트 작성의 필요성

profile
멋있는 백엔드 개발자

0개의 댓글