해결된 질문
작성
·
384
0
섹션 4. 회원 도메인 개발] 회원 기능 테스트 강의를 수강하는 중 질문이 있습니다.
@ExtendWith(SpringExtension.class)
@SpringBootTest
@Transactional // for rollback
class MemberServiceTest {
@Autowired
MemberService memberService;
@Autowired
MemberRepository memberRepository;
@Autowired
EntityManager em;
@Test
@DisplayName("회원가입")
@Rollback(false)
public void signUp() throws Exception {
// given
Member member = new Member();
member.setName("kim");
// when
Long saveId = memberService.join(member);
// then
Assertions.assertThat(member).isEqualTo(memberRepository.findOne(saveId));
}
@Rollback(false) 어노테이션을 사용한 결과 강의와 동일하게 db의 member table에 name = "kim" 이 정상적으로 들어온 것을 확인하였습니다.
그런데 이후 @Rollback(false) 어노테이션을 주석 처리한 뒤 Test를 실행하면, 위에서 저장했던 name="kim" 의 row가 지워진 것을 확인할 수 있었습니다.
여기서 저의 궁금증은, 첫 번째의 결과로 인해 name = "kim" 인 row가 이미 생성이 되었으므로, 2번을 실행할 때 memberService.join 메서드에서 이미 기존의 name="kim"인 데이터가 있으므로 오류를 발생시켜야 한다고 생각했는데요, 결과는 정상적으로 테스트가 수행됩니다.
위의 이유를 잘 모르겠습니다.
감사합니다.
답변 1
0
안녕하세요. km6914님, 공식 서포터즈 David입니다.
아래 가이드를 따라 프로젝트 공유 요청드립니다.
전체 프로젝트를 압축한 뒤
구글 드라이브로 공유해서 링크를 남겨주세요.
1. 구글 드라이브 업로드 방법
구글 드라이브 업로드 방법 링크
2. 주의사항
구글 드라이브 공유시 권한을 반드시 확인해주세요
3. 아래 내용을 작성 부탁드립니다.
a. 프로젝트 실행 방법을 알려주세요.
b. 어떻게 문제를 확인할 수 있는지 자세한 설명을 남겨주세요.
감사합니다.
https://drive.google.com/file/d/1oFrDjyU7Zdq5Qk8Xjn0ojzbZ1p8gcan_/view?usp=sharing
구글 드라이브에 전체 코드 압축 파일 업로드 하였습니다: jpashop
권한 확인 완료하였습니다.
application.yml 에서 mysql user, passwd 입력 후 테스트 가능합니다.
문제 확인 방법은 다음과 같습니다.
먼저 @Rollback(false) 어노테이션을 입력한 뒤 코드를 실행하면 member table에 name = "kim" 이 정상적으로 들어온 것을 확인할 수 있습니다.
다음으로 @Rollback(false) 어노테이션을 주석처리한뒤 코드를 실행하면 member table에 name = "kim" 이 삭제되는 것을 확인할 수 있습니다.