최근 알아보고 있는데, 양이 꽤 많아서 나눠서 올리는 게 아무래도 좋을 것 같다 ㅎㅎㅎ...
Test 코드를 작성하는 이유
> 운영상 장애를 겪지않기 위해 조기에 테스트 진행
> 테스트를 작성하면서 리팩토링 개선 여지 확보
> 결함을 수정하며 일정 수준까지 품질을 높이기 위해서
Test 종류
- 단위 테스트 (Unit Test)
· 가장 좁은 범위의 테스트 (테스트 대상은 클래스 혹은 메서드가 일반적)
· 테스트 하고자하는 컴포넌트의 기능 자체만 테스트 (통합 테스트 대비 속도가 빠름)
· 통합테스트와는 다르게, DB를 작동시켜 테스트하지 않음
=> HTTP 혹은 메서드 응답을 확인하기 위한 테스트
(Mock 가짜데이터로도 충분히 가능함)
- 통합 테스트 (integration Test)
· 애플리케이션과 DB가 정상적으로 작동되는지 통합 검토할 때 사용하는 테스트
· 모든 Bean을 등록하여 테스트를 진행한다 (Application Context 생성 후 DB를 작동시켜 테스트)
· 위 사항으로 인해 애플리케이션 규모가 크면 클수록 테스트 속도가 느려진다
(classes 속성 이용하여 필요한 Bean만 등록하여 속도를 개선할 수도 있음)
=> API에서 의존하는 대상들이 모두 정상적인지 테스트 (실제 DB에 값이 잘 들어가는지 확인함)
(Mock이 아닌, Application Context에 실제 Bean이 주입되도록 해야함)
대체로 @SpringBootTest를 활용하여 진행함
단위 / 통합 테스트 차이점 예시
> Unit Test의 경우
1. Service에서 Repository를 사용
2. Unit Test에서 Repository는 모조품이기에 어떠한 DB를 실제로 작동시키지 않음. 단지 어떤 질문에 대해(id 가 1인 유저를 줘) 정해져 있는 답(유저A 반환)을 할 뿐, 실제 DB에 저장되어 있는 값을 주지 않음
> Integration Test의 경우
1. Service에서 Repository를 사용. (Repository는 실제 DB와 연결된 Repository임)
2. 이 경우에 실제 MySQL, Oracle, PostgreSQL로 각각 바꿔가면서 실제로 시스템이 동작하는지 테스팅
'개인공부' 카테고리의 다른 글
Sychronization(동기화) / Synchronous(동기) / Asynchronous(비동기) 관련정보 (0) | 2023.03.14 |
---|---|
★ 스택 트레이스(Stack Trace ) 읽는 법 정리 (0) | 2023.03.08 |
Http 관련 핵심 요약정보 (0) | 2023.03.07 |
2023.03.04 TIL (위치기반 정보공유 웹 신규 프로젝트 MVP 소개) (0) | 2023.03.04 |
Stream 정리 (0) | 2023.02.26 |
댓글