그림으로 배우는 스프링6의 24장의 내용을 기반으로 공부한 내용입니다.
자동 테스트와 스프링의 테스트 지원
수동테스트와 자동 테스트
수동테스트
- 일반적으로 사람이 직접 프로그램을 실행하여 화면을 조작하고 결과를 눈으로 확인하는 것
자동테스트
- 테스트 코드가 프로그램을 실행하고 결과를 확인하는 것.
자동 테스트의 종류
1. 단위 테스트 (Unit Test)
정의:
- 개별적인 코드 단위(주로 함수, 메서드, 클래스)가 올바르게 동작하는지 확인하는 테스트.
목적:
- 코드의 최소 단위를 검증하여 작은 범위에서 버그를 조기에 발견.
특징:
- 개발자가 직접 작성하며, 코드 변경 시 쉽게 확인 가능.
- 외부 의존성이 없는 경우가 많아 빠르게 수행 가능.
- Mock 또는 Stub 객체를 활용해 의존성을 제거.
2. 통합 테스트 (Integration Test)
정의:
- 서로 다른 모듈이나 컴포넌트가 결합하여 올바르게 동작하는지 검증하는 테스트.
목적:
- 시스템의 모듈 간 상호작용 및 데이터 흐름을 검증.
특징:
- 여러 모듈이 통합된 상태에서 수행되므로, 단위 테스트보다 복잡.
- 외부 시스템(예: 데이터베이스, API)과의 연동 테스트를 포함할 수 있음.
- Mock 객체를 사용할 수도 있지만, 실제 연동 테스트를 선호.
3. E2E 테스트 (End-to-End Test)
정의:
- 전체 시스템이 사용자 관점에서 처음부터 끝까지 예상대로 동작하는지 확인하는 테스트.
목적:
- 실제 사용자 경험과 가장 유사한 방식으로 시스템의 모든 흐름을 테스트.
특징:
- 브라우저나 실제 환경에서 테스트를 실행.
- Selenium, Cypress 같은 도구를 활용.
- 실행 속도가 느리고, 환경 설정이 복잡할 수 있음.
- 주로 핵심 사용자 시나리오(예: 로그인, 결제 과정 등)를 검증.
모든 테스트를 적절히 조합하여 테스트 피라미드(Unit Test > Integration Test > E2E Test의 비율을 조정)

Web Application과 자동 테스트 패턴의 종류
| 참조 : 그림으로 배우는 스프링 6 |
|---|
 |
Spring의 테스트 지원 기능
- 스프링은 Junit이나 TestNG와 같은 소위 테스트 프레임워크로 불리는 라이브러리와 연동하여 다양한 기능을 제공
- DI 컨테이너 자동 생성
- @SpringBootTest
- @WebClientTest
- @JdbcTest, @DataJpaTest, @MybatisTest
| 참조 : 그림으로 배우는 스프링 6 |
|---|
 |
- 테스트 클래스에 임의의 Bean 인젝션
테스트 때만 불러오는 application-default.properties는 테스트 폴더 밑에 생성하면 됨, 그러면 테스트 때 실행되는데, DI 컨테이너 생성 시 활성화할 프로팔이르 지정하지 않으면 자동으로 defualt 프로파일이 활성화됨
- 지정한 SQL 파일을 테스트 시 불러와 실행
- 테이터베이스 자동 롤백