나를 기록하다
article thumbnail
반응형

1. 에러 내용

1.1. 1) 발생

<code />
package jpabook.jpashop.service; import jpabook.jpashop.domain.Member; import jpabook.jpashop.repository.MemberRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.junit.jupiter.api.Test; import org.springframework.test.annotation.Rollback; import org.springframework.transaction.annotation.Transactional; import javax.persistence.EntityManager; import static org.junit.Assert.*; @SpringBootTest @Transactional public class MemberServiceTest { @Autowired MemberService memberService; @Autowired MemberRepository memberRepository; @Autowired EntityManager em; @Test @Rollback(false) public void 회원가입() throws Exception { //given Member member = new Member(); member.setName("kim"); //when Long savedId = memberService.join(member); //then em.flush(); assertEquals(member, memberRepository.findOne(savedId)); } @Test(expected = IllegalStateException.class) public void 중복_회원_가입() throws Exception { //given Member member1 = new Member(); member1.setName("kim"); Member member2 = new Member(); member2.setName("kim"); //when memberService.join(member1); memberService.join(member2); //예외가 발생해야 한다!! //then fail("예외가 발생해야 한다."); } }

에러 내용

Junit4를 기준으로 하는 강의에서 try-catch문의 역할을 대신하는 @Test(expected = IllegalStateException.class) 코드를 사용하여서 따라 작성하였더니, Junit5 환경에서는 에러 발생.


1.2. 2) 원인

Junit4와 Junit5의 차이점이 문제. 변경사항이 존재한다. @Test(expected = IllegalStateException.class) 대신 assertThrows(IllegalStateException.class, () -> memberService.join(member2));와 같은 방식으로 처리한다.


1.3. 3) 해결

<code />
import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertThrows; ... @Test public void 중복_회원_예외() { // givenMember member1 = new Member(); member1.setName("kim"); Member member2 = new Member(); member2.setName("kim"); // when memberService.join(member1); assertThrows(IllegalStateException.class, () -> memberService.join(member2)); // then }

Junit5에서는 @Test 어노테이션을 사용할 때 expected 속성을 사용하지 않습니다. 대신 assertThrows() 메소드를 사용하여 특정 예외가 발생하는지 테스트할 수 있다. 위의 예시 코드에서는 assertThrows() 메소드를 사용하여 IllegalStateException이 발생하는지 검증한다.

Junit5를 사용하면 조금 더 직관적이고 편리한 테스트 코드를 작성할 수 있다.

반응형
profile

나를 기록하다

@prao

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!