JPA가 동작하는 걸 TEST 하기 위해서.
좋은 테스트라고 할 수는 없음.
좋은 테스트 -> DB나 Dependencies 없이, 스프링도 엮지 않고 순수한 method로만 test하는게 좋음. unit test
아래 테스트 같은 경우는 통합 테스트 할때.
@RunWith(SpringRunner.class) // spring과 integration 해서 test
@SpringBootTest // spring과 integration 해서 test
@Transactional
public class MemberServiceTest {
@Autowired MemberService memberService;
@Autowired MemberRepository memberRepository;
// @Autowired EntityManager em; // db에 query 가는 거 확인
@Test
// @Rollback(false) // rollback 안함 -> db에 반영됨
public void 회원가입() throws Exception{
//given
Member member = new Member();
member.setName("kim");
//when
Long savedId = memberService.join(member);
//then
// em.flush(); // db에 query 가는 거 확인
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("예외 발생");
}