인프런 커뮤니티 질문&답변

크아앙님의 프로필 이미지
크아앙

작성한 질문수

스프링 DB 1편 - 데이터 접근 핵심 원리

트랜잭션 - 적용2

테스트코드에서 rollback 적용 안됨

작성

·

727

2

안녕하세요 강의 도중 에러를 해결하지 못해서 질문 남깁니다.

예시 중 이체 중 오류발생 시 롤백하는 테스트를 진행하는데,

throw한 에러를 모두 잡아서 rollback 코드까지는 들어가는데, 결과는 롤백이 안되는 상황입니다.

(memberA가 10000원으로 롤백되어야 하는데 안됨)

 

롤백 코드가 있는 부분은 분명 실행이 된 것이 확인 되는데 막상 결과는 롤백이 되지 않습니다.

 

 

답변 2

0

크아앙님의 프로필 이미지
크아앙
질문자

https://drive.google.com/file/d/1ZUpf2qkTbdjnHPOGYmv_bY3Aw2FNFdn4/view?usp=sharing

구글드라이브 링크입니다.

작성한 테스트코드의 MemberServiceV2Test의 이체 중 실패 부분을 실행할 때 롤백이 되지 않는 현상입니다.

 

해당 코드를 그대로 복사해서 사용하는 MebmerServiceV3_1Test 에서는 제대로 진행이 되는 점의 특이합니다.

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 크아앙님

확인해보니 다음 코드가 잘못되어 있었습니다.

MemberServiceV2.bizLogic() 메서드

기존 코드

private void bizLogic(Connection con, String fromId, String toId, int money) throws SQLException {
    Member fromMember = memberRepository.findById(con, fromId);
    Member toMember = memberRepository.findById(con, toId);

    memberRepository.update(fromId, fromMember.getMoney() - money);
    validation(toMember);
    memberRepository.update(toId, toMember.getMoney() + money);
}

변경 코드 - update(con, ...) con을 추가해주세요.

private void bizLogic(Connection con, String fromId, String toId, int money) throws SQLException {
    Member fromMember = memberRepository.findById(con, fromId);
    Member toMember = memberRepository.findById(con, toId);

    memberRepository.update(con, fromId, fromMember.getMoney() - money);
    validation(toMember);
    memberRepository.update(con, toId, toMember.getMoney() + money);
}

감사합니다.

크아앙님의 프로필 이미지
크아앙
질문자

아 감사합니다!

간단한 파라미터가 빠진건데 죽어도 안보인거였군요..

 

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 크아앙님

먼저 전체 테이블을 삭제하고 다시 생성해보시겠어요? 그래도 진행이 안된다면

전체 프로젝트를 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.

구글 드라이브 업로드 방법은 다음을 참고해주세요.

https://bit.ly/3fX6ygx

주의: 업로드시 링크에 있는 권한 문제 꼭 확인해주세요

추가로 다음 내용도 코멘트 부탁드립니다.

1. 실행 방법을 알려주세요.

2. 어떻게 문제를 확인할 수 있는지 자세한 설명을 남겨주세요.

감사합니다.

크아앙님의 프로필 이미지
크아앙

작성한 질문수

질문하기