테스트 코드가 필요한 이유
버그를 조기에 발견하고, 리팩토링을 수행할 때 유용함
개발 속도를 향상시키고, 코드에 대한 문서로서 역할을 수행할 수 있음
프론트엔드 E2E(End-to-End) 테스트(=기능 테스트, 브라우저 테스트)
1. 개념
- 어플리케이션의 사용자 경험을 처음부터 끝까지 시뮬레이션하여 테스트하는 방식
- 사용자 관점에서 전체 어플리케이션이 의도한 대로 작동하는지 검증함
- 테스트 과정에서 실제 사용자 동작을 흉내내어 시나리오를 테스트 함(버튼 클릭, 페이지 이동, 데이터 입력)
- 예시) Cypress, Playwright
2. 장점
- 사용자와 동일한 방식으로 작동시키기 때문에 사용자에게 직접적인 영향을 미치는 오류 조기 발견 가능
- 프로덕트의 안정성 높이고, 실제 배포 후 발생하는 리스크 줄이는 데 도움이 됨
- main user flow나 business logic(결제 등)이 포함된 부분을 검증하는데 적용하면 효과적임
통합 테스트(Integration Test)
1. 개념
- 다양한 구성 요소가 상호작용하여 전체 또는 일부 시스템이 예상대로 작동하는지 검증
- 실제 값에 접근해서 테스트함(실제 데이터베이스, 네트워크 등 외부 시스템)
2. 장점
- 여러 구성 요소 간의 상호작용을 검증하는 데 초점을 맞춤(시간은 단위 테스트보다 길어질 수 있음)
- E2E 테스트보다는 빠른 검증이 가능(실제 시나리오를 모두 검증하지는 않기 때문). 개발 초기 단계 테스트에 적합.
유닛 테스트(Unit test, 단위 테스트)
1. 개념
- 가능한 가장 작은 모듈이 의도한 대로 작동하는지 검증하는 방식
- 함수, 메서드, 클래스, 모듈과 같은 가장 작은 테스트 가능한 코드 조각
- 외부 모듈과 직접 값을 주고받는 것이 아닌 Mock을 사용해 테스트함(예상 외의 값이 개입하지 않음)
2. 장점
- 작은 단위라서 빠르게 테스트 할 수 있음. 자주 일어나는 버그를 잡을 때 좋음
- 코드 설계 구조가 명확하지 않으면 유닛 테스트가 어렵기 때문에 코드 구조 개선에도 도움 됨
유닛 테스트와 E2E 테스트의 비교
- 유닛테스트는 개별적인 동작은 확인하지만, 전체 시스템의 흐름과 사용자의 실제 경험을 확인하지 않음
- 로그인 기능 유닛 테스트
- 올바른 사용자 정보를 입력했을 때 인증이 성공하는지 확인.
- 그러나 로그인 후 페이지 이동, 세션 유지, 렌더링은 확인하지 않음
- E2E 테스트: 애플리케이션을 사용자 관점에서 처음부터 끝까지 검사, 모든 시스템이 통합적으로 작동하는지
- UI 상호작용, API 호출, 화면 전환 등 여러 구성요소 함께 작동 과정에서 발생할 수 있는 문제 탐지
- 사용자가 실제로 겪게 될 시나리오 점검해 전체 시스템 관점에서 오류 조기에 발견
- 유닛테스트와 E2E 테스트를 상호 보완적으로 활용하면 좋음
- 유닛테스트: 개별 컴포넌트 신속 정확 검사. 디버깅 시간 줄임.
- E2E 테스트: user flow 점검해 배포 후 발생가능한 치명적인 문제 예방.
신뢰도: E2E>통합>유닛, 효율성: 유닛>통합>E2E
슬라이스 테스트
특정 레이어(controller, service, repository)에 대한 테스트
어플리케이션의 특정 슬라이스가 올바르게 작동하는지 확인하기 위해 작성
스프링의 특정 컴포넌트만 로드해서 테스트하므로 상대적으로 빠름
관련 어노테이션: @WebMvcTest, @DataJpaTest
출처
[1] 매일메일. 250117. 프론트엔드 E2E 테스트에 대해서 설명해주세요. 52번째. https://maeil-mail.kr
[2] Unit 테스트, 단위 테스트
https://velog.io/@seongwon97/Unit-Test-%EB%8B%A8%EC%9C%84-%ED%85%8C%EC%8A%A4%ED%8A%B8
[3] 유닛테스트, 통합테스트, 기능테스트란?
[4] 프론트엔드 통합 테스트로 더 안전한 웹 서비스 개발하기
https://techblog.woowahan.com/19509/
[5] GPT에게 E2E 테스트에 대해 질문
[6] 매일메일. 250107. BE. 단위테스트와 통합 테스트의 차이점은 무엇인가요? 83번. https://maeil-mail.kr
'개발자 강화 > 프론트엔드' 카테고리의 다른 글
🌟[매일메일] React의 render phase, commit phase란? (FE.241227) (0) | 2025.01.20 |
---|---|
[매일메일] CSS Flexbox와 Grid의 차이점 (FE.250116) (0) | 2025.01.17 |
[매일메일] 웹 어플리케이션의 성능을 최적화 하는 방법? (FE.250107/250102) (0) | 2025.01.15 |
[매일메일] SSR의 개념과 장단점? (FE.250115) (0) | 2025.01.15 |
[매일메일] 디바운스와 쓰로틀, 무한 스크롤? (FE.250108) (0) | 2025.01.14 |