1. 단위 테스트란?
하나의 모듈을 기준으로 독립적으로 진행되는 가장 작은 단위의 테스트. 여기서 모듈은 애플리케이션에서 작동하는 하나의 기능 또는 메소드로 이해할 수 있다.
또한 단위 테스트는 테스트 유형에 따라 논리 단위 테스트, 통합 단위 테스트 등으로 나눌 수 있습니다.
- 논리 단위 테스트 : 한 메서드에 집중한 테스트로 mock이나 stub을 이용해 테스트 메서드의 경계를 제어할 수 있다.
- 통합 단위 테스트 : 실제 운영 환경(혹은 그 일부)에서 컴포넌트 간 연동에 치중한 테스트, 예를 들어 데이터베이스를 사용하는 코드라면 데이터베이스를 효과적으로 호출하는가를 테스트할 수 있다.
단위 테스트의 경우 보통 해당 코드를 작성한 개발자가 진행한다.
2. 좋은 단위 테스트 속성(FIRST)
Fast : 테스트 코드 실행이 빨라야한다. 대개 단위 테스트는 내부 코드만 테스트할 시 얼마 걸리지 않지만, 외부 데이터베이스나 다른 자원을 사용할 경우 시간이 더 많이 걸린다. 하나에 평균 200밀리초라면 2500개의 테스트를 수행하는데는 8분 이상이 걸린다.
Isolated : 좋은 단위 테스트는 작은 양의 코드 (Unit)에 집중 해야한다. 하나의 테스트가 다른 테스트와 상호 작용하거나 의존할 경우 문제가 발생할 소지가 늘어난다.
테스트 대상 코드가 데이터베이스를 읽는 다른 코드와 상호작용할 수 있는데, 데이터 의존성은 많은 문제를 만들기도한다. 대상 데이터가 올바른지도 확인이 필요하며 외부 저장소에 접근성 이슈로 실패할 수도 있다.
Repeatabe : 반복 가능한 테스트는 실행할 때 마다 항상 결과가 같아야한다. 어떤 상황에서는 성공하고 어떤 상황에서는 실패하는 테스트 코드를 만들지 않는다.
Self-validationg : 테스트는 기대하는 결과가 무엇인지 단언(assert)하지 않으면 올바른 테스트라고 볼 수 없다. System.out.println()으로 결과를 콘솔로 출력하고 내가 비교해보면서 검증하지 말고 JUnit등에서 제공하는 검증 코드를 이용하자
Timely : 단위 테스트를 뒤로 미루지 말고 적시(즉시) 작성하자. 단위 테스트는 수행하면 할수록 어느 부분에 테스트가 필요한지 명확해지기 때문에 테스트 대상 코드가 줄어들며 이런 경험이 반복될수록 테스트를 작성하기 쉬워진다. 이런 장점들로 인해서 TDD같은 프로세스가 등장했다.
REFERENCE
https://sabarada.tistory.com/68
https://haruhiism.tistory.com/23
https://coding-start.tistory.com/261
'Test' 카테고리의 다른 글
Mockito && 스프링부트 테스트 관련 어노테이션 정리 (0) | 2021.11.17 |
---|---|
무엇을 어떻게 테스트할 것인가 (feat : 권용근님) (0) | 2021.11.17 |
테스트 종류 (0) | 2021.11.17 |
AssertJ 기본 사용법 (0) | 2021.11.15 |
Junit5 기본 사용법 정리 (0) | 2021.11.15 |