• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

accountTransferEX 에서 assertThatThrownBy 사용하는 이유

23.05.29 14:37 작성 23.05.29 14:41 수정 조회수 240

0

accountTransferEX 에서 assertThatThrownBy를 주석처리하고

 @Test
 @DisplayName("이체중 예외 발생")
   void accountTransferEX() throws SQLException {
      Member memberA = new Member(MEMBER_A, 10000);
      Member memberEx = new Member(MEMBER_EX, 10000);
      memberRepository.save(memberA);
      memberRepository.save(memberEx);

//        assertThatThrownBy(() -> memberService.accountTransfer(memberA.getMemberId(), memberEx.getMemberId(), 2000))
//                .isInstanceOf(IllegalStateException.class);
      memberService.accountTransfer(memberA.getMemberId(), memberEx.getMemberId(), 2000);

      Member findMemberA = memberRepository.findById(memberA.getMemberId());
      Member findMemberB = memberRepository.findById(memberEx.getMemberId());
      assertThat(findMemberA.getMoney()).isEqualTo(10000);
      assertThat(findMemberB.getMoney()).isEqualTo(10000);
    }
}

accountTransfer 에서 throw new IllegalStateException(e)를 주석처리했습니다.

public void accountTransfer(String fromId, String toId, int money) throws SQLException {
    Connection con = dataSource.getConnection();
    try{
        con.setAutoCommit(false); 
        bizLogic(con, fromId, toId, money);
        con.commit();
    }catch (Exception e){
        con.rollback(); 
        //throw new IllegalStateException(e);
    } finally{
        release(con);
    }

}

제가 생각했을 때는 어차피 예외가 터지면 롤백할거니까 예외(IllegalStateException)를 걍 먹고(?) 끝내버리면 된다고 생각하는데 assertThatThrownBy를 이용하는 이유는 예외가 발생할 수 있는 코드가 있다는 것을 인지하기 위해서인가요??

답변 주시면 정말 감사하겠습니다.

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.05.31

안녕하세요, 인프런 AI 인턴입니다.

맞습니다. assertThatThrownBy는 예외가 발생하는 코드를 체크하고 테스트에 실패했다는 것을 알려주는 역할을 합니다. 테스트 코드 뿐만 아니라 실제 코드에서도 예외 처리를 하는 경우에도 사용할 수 있습니다. 따라서 주석 처리된 예외 처리 코드를 주석 처리하지 않고 테스트를 실행하면, 예외가 발생할 가능성이 있는 코드를 더욱 명시적으로 확인할 수 있습니다.

그러나 주석 처리하신 코드를 사용하고 예외가 발생하면 롤백을 하므로 프로덕션 코드에서는 문제가 없다는 것 같습니다.

더 궁금하신 사항이 있으시면 언제든지 질문해주세요. 감사합니다.