작성
·
546
0
질문글 참고해서 작성해보았는데 계속 에러가 뜹니다. 무엇이 문제일까요?
특히 중복회원예외 => assertThrows에서 노란 점선줄이 뜨고 assertThat에서 빨간색 글씨가 됩니다.
package jpabook.jpashop.service;
import jpabook.jpashop.domain.Member;
import jpabook.jpashop.repository.MemberRepository;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.transaction.annotation.Transactional;
import javax.persistence.EntityManager;
import static org.junit.jupiter.api.Assertions.assertThrows;
@SpringBootTest
@Transactional // 이게 있어야 롤백이 됨
class MemberServiceTest {
@Autowired
MemberService memberService;
@Autowired
MemberRepository memberRepository;
@Autowired
EntityManager em;
@Test
public void 회원가입() throws Exception {
// given => 이렇게 주어졌을 때
Member member = new Member();
member.setName("kim");
// when => 이렇게 하면
Long saveId = memberService.join(member);
// then => 이렇게 된다. 검증해라
em.flush(); // db에 반영됨 + @Transactional때문에 롤백도 됨 => DB에 데이터가 남으면 안되므로
Assertions.assertEquals(member, memberRepository.findOne(saveId));
}
@Test
public void 중복_회원_예외() throws Exception {
// given
Member member1 = new Member();
member1.setName("Kim");
Member member2 = new Member();
member2.setName("kim");
// when
memberService.join(member1);
IllegalStateException e = Assertions.assertThrows(IllegalStateException.class, () -> {
memberService.join(member2);
});
//memberService.join(member2); // 예외가 발생해야 한다!!!
// then
Assertions.assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
}
}
답변 1
0
asserThat의 문제는 해결했는데 assertThrows 밑에 org.opentest4j.AssertionFailedError: Expected java.lang.IllegalStateException to be thrown, but nothing was thrown 이런 에러가 뜹니다.
예외가 발생해야 하는데 발생하지 않았다고 하지만 name을 똑같이 kim으로 했는데 왜 예외가 발생하지 않는 건지는 잘 모르겠습니다.
뭐가 문제일까요??
전체 코드입니다.
@Test
public void 중복_회원_예외() throws Exception {
// given
Member member1 = new Member();
member1.setName("Kim");
Member member2 = new Member();
member2.setName("kim");
// when
memberService.join(member1);
IllegalStateException e = assertThrows(IllegalStateException.class, () -> {
memberService.join(member2);
});
//memberService.join(member2); // 예외가 발생해야 한다!!!
// then
Assertions.assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
}
혹은 아래와 같이 한쪽의 Asserions는 풀 패키지 경로를 작성하여 해결할 수 있습니다.