Repository 테스트는 데이터베이스와의 상호작용이 의도한 대로 동작하는지 확인하기 위한 중요한 단계입니다. 아래는 각 검증 항목의 목적과 주요 테스트 내용에 대한 상세한 설명입니다.
1. 데이터 정확성 검증
목적: 데이터가 저장, 조회, 수정, 삭제 과정에서 정확하게 처리되는지 확인합니다.
- 테스트 내용:
- 데이터를 저장한 후, 조회된 데이터가 입력한 데이터와 일치하는지 확인.
- 수정된 데이터가 올바르게 반영되었는지 확인.
- 삭제된 데이터가 실제로 존재하지 않는지 검증.
예시 코드 분석:
Optional<Member> actualOptionalMember1 = memberRepository.findByMbNo(member1.getMbNo());
Assertions.assertAll(
() -> Assertions.assertNotNull(actualOptionalMember1.get()),
() -> Assertions.assertEquals(member1.getMbEmail(), actualOptionalMember1.get().getMbEmail()),
() -> Assertions.assertEquals(member1.getMbName(), actualOptionalMember1.get().getMbName())
);
- findByMbNo() 메서드를 통해 저장된 데이터를 조회하고, 각 필드 값이 정확히 매칭되는지 확인합니다.
-
assertAll() 을 사용하여 여러 검증을 한 번에 수행하며, 모든 필드가 정확히 일치해야 테스트를 통과합니다.
2. 데이터 업데이트 검증
목적: 기존 데이터를 수정했을 때 변경 사항이 제대로 반영되는지 확인합니다.
- 테스트 내용:
- 특정 필드를 수정한 후, 변경된 값이 데이터베이스에 반영되었는지 확인.
- 수정되지 않은 필드는 기존 값을 유지하는지 확인.
예시 코드 분석:
memberRepository.update(memberUpdateRequest);
Optional<Member> actualOptionalMember3 = memberRepository.findByMbNo(member3.getMbNo());
Assertions.assertAll(
() -> Assertions.assertEquals("member3@gmail.com", actualOptionalMember3.get().getMbEmail()),
() -> Assertions.assertEquals("NHN아카데미3", actualOptionalMember3.get().getMbName())
);
- update() 메서드를 호출해 데이터를 수정한 뒤, findByMbNo 로 조회하여 변경된 필드 값을 검증합니다.
- 수정된 값(mbEmail, mbName, mbMobile)이 정확히 반영되었는지 확인합니다.
3. 존재 여부 검증
목적: 특정 조건(회원 번호, 이메일 등)으로 데이터 존재 여부를 확인합니다.
- 테스트 내용:
- 데이터가 존재할 경우 true, 존재하지 않을 경우 false 를 반환해야 함.
- 잘못된 조건으로 조회 시 적절히 처리되는지 확인.
예시 코드 분석:
boolean actual = memberRepository.existsByMbNo(member1.getMbNo());
assertTrue(actual);
- existsByMbNo 메서드를 사용해 특정 회원 번호로 데이터 존재 여부를 검증합니다.
- 존재하지 않는 회원 번호로 테스트(notExistsByMbNo)하여 반대 상황도 확인합니다.
4. 삭제 검증
목적: 데이터를 삭제한 후, 해당 데이터가 실제로 삭제되었는지 확인합니다.
- 테스트 내용:
- 삭제 후 해당 데이터를 조회했을 때 결과가 없어야 함.
- 존재 여부를 다시 확인하여 false 반환 여부를 검증.
예시 코드 분석:
memberRepository.deleteByMbNo(member1.getMbNo());
boolean actual = memberRepository.existsByMbNo(member1.getMbNo());
assertFalse(actual);
-
deleteByMbNo 메서드를 통해 데이터를 삭제하고, 이후 existsByMbNo로 존재 여부를 확인하여 삭제 성공 여부를 검증합니다.
5. 비밀번호 변경 검증
목적: 비밀번호 변경이 정확히 반영되었는지 확인합니다.
- 테스트 내용:
- 기존 비밀번호를 새로운 값으로 변경하고, 변경된 값이 DB에 저장되었는지 검증.
- 다른 필드 값은 영향을 받지 않는지 확인.
예시 코드 분석:
memberRepository.updatePassword(member1.getMbNo(), mbPassword);
Optional<Member> dbMemberOptional = memberRepository.findByMbNo(member1.getMbNo());
assertEquals(mbPassword, dbMemberOptional.get().getMbPassword());
- updatePassword 메서드로 비밀번호를 변경한 뒤, 다시 조회하여 변경된 비밀번호 값을 비교합니다.
- 다른 필드는 그대로 유지되는지를 추가적으로 테스트할 수 있습니다.
6. 트랜잭션 및 예외 처리 검증
목적: 트랜잭션 처리 및 예외 발생 시 시스템이 올바르게 동작하는지 확인합니다.
- 테스트 내용:
- 잘못된 입력(존재하지 않는 회원 번호 등)으로 작업을 수행했을 때 적절한 예외가 발생하는지 확인.
- 트랜잭션 롤백이 제대로 이루어지는지 검증.
예시 코드 분석:
Optional<Member> member = memberRepository.findByMbNo(99999L);
assertFalse(member.isPresent(), "존재하지 않는 회원 번호로 조회가 가능해야 합니다.");
- 잘못된 회원 번호로 조회 시 결과가 없음을 보장(isPresent() 가 false).
- 예외 발생 시 적절한 메시지를 출력하거나 로그에 기록하도록 설정할 수 있습니다.
간략히 넘어갈 수 있는 부분
주요 테스트 항목 요약
- 데이터 정확성 검증
- 저장/조회/수정/삭제 작업의 결과를 비교하여 일관성을 보장.
- 업데이트 및 삭제
- 수정 및 삭제 작업 후 상태 변화를 확인.
- 존재 여부 및 비밀번호 변경
- 특정 조건으로 데이터 존재 여부와 비밀번호 변경 결과를 비교.
- 트랜잭션 및 예외 처리
- 잘못된 입력이나 트랜잭션 실패 시 적절히 처리되는지 확인.
추가적인 고려 사항
- Mocking 또는 In-Memory DB(H2)를 활용해 실제 DB 의존성을 줄이고 빠른 테스트 환경 구성.
- 대규모 테스트 환경에서는 통합 테스트와 단위 테스트를 분리하여 효율성을 높이는 것이 중요.
'Spring > 02. Repository' 카테고리의 다른 글
| 객체의 특정 필드에 값이 없는 상태로 db에 저장하고나서 값이 생긴 경우 (0) | 2025.02.13 |
|---|---|
| 01. Repository 개발 (1) | 2025.02.11 |