본문 바로가기
개인공부

Test 시리즈 1 (사용이유, 테스트 종류)

by 리승우 2023. 3. 8.

최근 알아보고 있는데, 양이 꽤 많아서 나눠서 올리는 게 아무래도 좋을 것 같다 ㅎㅎㅎ...

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로 각각 바꿔가면서 실제로 시스템이 동작하는지 테스팅

댓글