//MemberRepository.javapackage jpabook.jpashop;
import org.springframework.stereotype.Repository;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@RepositorypublicclassMemberRepository{
//Jpa를 쓰기 때문에 EntityManager가 있어야 합니다.//Spring-Boot를 쓰기 때문에, 이 어노테이션이 있으면 SpringBoot Container가 매니저를 주입을 해줍니다.//implementation 'spring-boot-starter-data-jpa' 때문에 가능@PersistenceContextprivate EntityManager em;
public Long save(Member member){
em.persist(member);
return member.getId();
}
public Member find(Long id){
return em.find(Member.class, id);
}
}
4-3. TestCase 생성
//MemberRepositoryTest.javapackage jpabook.jpashop;
import org.assertj.core.api.Assertions;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.Transactional;
importstatic org.junit.Assert.*;
//JUnit에게 "나 스프링과 관련된 것으로 테스트 할 거야"라고 알려주는 것.@RunWith(SpringRunner.class)@SpringBootTestpublicclassMemberRepositoryTest{
@Autowired MemberRepository memberRepository;
@Test//import org.springframework.transaction.annotation.Transactional 사용 권장//EntityManager를 통한 모든 데이터 변경은 항상 트랜잭션 안에서 이뤄져야 합니다.@TransactionalpublicvoidtestMember()throws Exception {
//given
Member member = new Member();
member.setUsername("memberA");
//whenfinal Long savedId = memberRepository.save(member);
final Member findMember = memberRepository.find(savedId);
//then
Assertions.assertThat(findMember.getId()).isEqualTo(member.getId());
Assertions.assertThat(findMember.getUsername()).isEqualTo(member.getUsername());
Assertions.assertThat(findMember).isEqualTo(member);
}
}