단위 테스트(Unit Test)
- 테스트
- 어떤 대상에 대한 일정 기준을 정해놓고, 그 대상이 정해진 기준에 부합하는지 부합하지 못하는지를 검증하는 과정
- 테스트 이유 : 테스트를 잘 거쳐 테스트 대상이 검증 과정에 잘 통과하게 만들어 최대한 더 나은 결과를 얻기 위함(100% 완벽할 순 없으나 더 좋은 결과를 위함)
- 테스트 종류
-
기능 테스트
- 테스트의 범위가 제일 큼
- 애플리케이션 제공 기능이 올바르게 동작하는지 테스트
- 테스트 주체 : 개발자가 아닌 제 3자
- 연관 대상이 많기 때문에 단위 테스트라고 부르기 힘듦
-
통합 테스트
- 클라이언트 툴 없이 테스트 코드를 통해 테스트
- 테스트 주체 : 개발자, 개발팀
- 애플리케이션의 여러 계층과 연관되어 단위테스트라 하기에 범위가 큼
-
슬라이스 테스트
- 애플리케이션을 특정 계층으로 쪼개어서 하는 테스트
- Mock 객체를 사용하여 계층별로 끊어 테스트 가능(테스트 범위 축소화)
- 각 계층에서 HTTP요청이 필요하고, 외부 서비스, DB 연동 등으로 인해 단위테스트라고 보기엔 단위가 큼
-
단위 테스트
- 비즈니스 계층에서 사용하는 클래스들을 메서드 단위로 독립적으로 테스트
- 단위테스트는 최대한 독립적이고 최대한 작은 단위인게 좋기에 다른 계층들은 단위테스트라고 보기 어려움
-
단위 테스트 (Unit Test)
- 단위테스트 코드는 대부분 메서드 단위로 작성
- DB의 상태가 테스트 전후가 동일하게 유지될 수 있다면 DB가 연동되어있어도 단위테스트라고 할 수 있음
- 단, 단위테스트는 최대한 독립적이며 최대한 작은 단위인 것이 좋음
-
단위테스트 사용 이유
- HTTP 요청을 직접 보내는 번거로운 테스트를 단순화 가능
- 구현 코드가 의도대로 동작하는지 결과를 빠르게 확인할 수 있음
- 작은 단위의 테스트에서는 버그를 찾기 용이
- 테스트 케이스가 잘 짜여져있으면 버그 리포트를 전달받았을 때 단계적으로 찾아가기 용이
- 테스트 케이스(Test Case) : 메서드 등 하나의 단위를 테스트하기 위해 작성하는 테스트 코드
-
단위테스트 원칙 F.I.R.S.T
- Fast(빠르게) : 테스트케이스는 빨라야한다
- Independent(독립적으로) : 테스트케이스는 독립적이어야한다
- Repeatable(반복 가능하게) : 테스트케이스는 어떤 환경에서도 반복 실행이 가능해야한다
- Self-validating(셀프 검증 되도록) : 테이스케이스 스스로 결과가 옳고 그른지를 판단할 수 있어야한다
- Timely(시기적절하게) : 테스트하려는 기능 구현을 하기 직전에 작성해야한다 (TDD)