리뷰 관련 기능에 대한 MySQL 데이터베이스 연동 테스트 코드를 작성했습니다. 기존 H2 기반에서 MySQL 기반으로 변경하고, 실제 데이터베이스와 연동되는 통합 테스트를 추가했습니다.
- 파일:
src/main/resources/bjs/zangbu/review/mapper/ReviewMapper.xml - 변경사항:
user_id→member_id필드명 변경address_id→complex_id필드명 변경- 누락된
selectComplexIdByBuildingId쿼리 추가
- TestConfig.java: Spring Framework 기반 테스트 설정
- MySQL 데이터소스 설정
- MyBatis SqlSessionFactory 설정
- 트랜잭션 매니저 설정
- application-test.yml: MySQL 연결 정보
- test-data.sql: 테스트용 초기 데이터
- 기능: MyBatis 매퍼와 MySQL DB 직접 연동 테스트
- 테스트 케이스:
- 리뷰 목록 조회 (
selectByBuilding) - 리뷰 개수 조회 (
countByBuilding) - 최신 리뷰 평점 조회 (
selectLatestReviewRank) - 리뷰 상세 조회 (
selectById) - 리뷰 생성 (
insertReview) - 리뷰 삭제 (
deleteReview) - 단지 ID 조회 (
selectComplexIdByBuildingId)
- 리뷰 목록 조회 (
- 기능: 서비스 레이어와 MySQL DB 연동 테스트
- 테스트 케이스:
- 리뷰 목록 조회 (페이징 포함)
- 리뷰 상세 조회
- 리뷰 생성 (complexId 자동 조회/직접 제공)
- 리뷰 삭제
- 예외 상황 처리 (존재하지 않는 데이터, 유효성 검사)
- 기능: REST API 엔드포인트와 MySQL DB 연동 테스트
- 테스트 케이스:
- GET
/review/list/{buildingId}- 리뷰 목록 조회 - GET
/review/{reviewId}- 리뷰 상세 조회 - POST
/review- 리뷰 생성 - DELETE
/review/{reviewId}- 리뷰 삭제 - 페이징 기능 테스트
- HTTP 상태 코드 및 JSON 응답 검증
- GET
- README_TEST.md: 테스트 실행 방법 가이드
- test-runner.gradle: 테스트 실행용 Gradle 태스크
- REVIEW_TEST_SUMMARY.md: 작업 완료 보고서 (본 문서)
- Database: MySQL 8.0+
- Testing Framework: JUnit 5
- Assertion Library: AssertJ
- Mocking: Mockito
- Spring: Spring Framework 5.3.33 (Spring Test)
- ORM: MyBatis 3.5.15
- Connection Pool: HikariCP
zangBu_Back/
├── src/
│ ├── main/
│ │ └── resources/
│ │ └── bjs/zangbu/review/mapper/
│ │ └── ReviewMapper.xml (수정됨)
│ └── test/
│ ├── java/
│ │ └── bjs/zangbu/
│ │ ├── config/
│ │ │ └── TestConfig.java (신규)
│ │ └── review/
│ │ ├── mapper/
│ │ │ └── ReviewMapperTest.java (신규)
│ │ ├── service/
│ │ │ └── ReviewServiceIntegrationTest.java (신규)
│ │ └── controller/
│ │ └── ReviewControllerIntegrationTest.java (신규)
│ └── resources/
│ ├── application-test.yml (신규)
│ ├── test-data.sql (신규)
│ ├── README_TEST.md (신규)
│ └── test-runner.gradle (신규)
└── REVIEW_TEST_SUMMARY.md (신규)
- MySQL 서버 실행 (localhost:3306)
- 데이터베이스 생성 (
zangBu) - 필요한 테이블 생성 (제공된 SQL 스크립트 사용)
- 사용자 권한 설정 (
backjinsa/backjinsa1234)
# 전체 테스트 실행
./gradlew test
# 리뷰 관련 테스트만 실행
./gradlew test --tests "bjs.zangbu.review.*"
# MySQL 통합 테스트만 실행
./gradlew test --tests "*IntegrationTest"
# 특정 테스트 클래스 실행
./gradlew test --tests "bjs.zangbu.review.mapper.ReviewMapperTest"- ✅ 모든 CRUD 작업 테스트
- ✅ 페이징 및 정렬 테스트
- ✅ 외래키 관계 테스트
- ✅ 예외 상황 처리
- ✅ 비즈니스 로직 테스트
- ✅ 트랜잭션 처리 테스트
- ✅ 유효성 검증 테스트
- ✅ 예외 처리 테스트
- ✅ REST API 엔드포인트 테스트
- ✅ HTTP 상태 코드 검증
- ✅ JSON 요청/응답 검증
- ✅ 에러 응답 테스트
- 실제 DB 연동: Mock 대신 실제 MySQL DB 사용으로 더 신뢰할 수 있는 테스트
- 데이터 일관성: 트랜잭션 롤백으로 테스트 간 데이터 격리
- 포괄적 테스트: 매퍼부터 컨트롤러까지 전 계층 테스트
- 문서화: 상세한 실행 가이드 및 트러블슈팅 정보 제공
- MySQL 서버 실행 상태 확인
- 포트 번호 확인 (3306)
- 사용자 권한 확인
- 필요한 테이블 생성 확인
- 외래키 제약조건 확인
- 테이블 스키마 일치 확인
- Gradle 빌드 실행
- 라이브러리 버전 호환성 확인
- 성능 테스트: 대용량 데이터에 대한 성능 테스트 추가
- 동시성 테스트: 멀티스레드 환경에서의 동시성 테스트
- 보안 테스트: SQL 인젝션 등 보안 취약점 테스트
- API 문서화: Swagger 등을 활용한 API 문서 자동화
리뷰 기능에 대한 포괄적인 MySQL 연동 테스트가 성공적으로 구현되었습니다. 이제 실제 데이터베이스 환경에서 안정적으로 기능을 검증할 수 있으며, 향후 기능 개발 및 리팩토링 시 회귀 테스트로 활용할 수 있습니다.
모든 테스트는 실제 MySQL 데이터베이스를 사용하면서도 트랜잭션 롤백을 통해 데이터 안정성을 보장합니다.