가. 테스트 케이스 Method 위에 @Rollback(value = false)를 선언하여 롤백을 막는다.
나. service 로직을 실행한 뒤 EntityManager의 flush() method를 호출한다.
// given Member member = new Member(); member.setName("testName"); // when Long id = memberService.join(member); // then // persistenceContext에 있는 변경 또는 등록건을 강제로 DB에 날림 em.flush(); // JPA는 같은 트랜잭션 안의 같은 엔티티(PK값이 똑같음)라면 // 영속성컨텍스트(persistenceContext)에서 하나로 관리가 됨 // 고로 결과는 true Assert.assertEquals(member, memberRepository.findOne(id));
@RunWith(SpringRunner.class)
Spring이랑 같이 엮어서 실행 함
@SpringBootTest
스프링부트 컨테이너 안에서 테스트를 돌리기 위함
@RunWith(SpringRunner.class) @SpringBootTest @Transactional public class MemberServiceTest { ... }
flush()
persistenceContext에 있는 변경 또는 등록 내용을 데이터베이스에 반영하도록 한다.
persist()
트랜잭션이 모두 통과했을 때 비로소 persistenceContex에 있는 변경 또는 등록건을 flush()한다.
persistenceContext : 영속성 컨텍스트