그리고 동일한 엔티티를 조회하면 db안타고 영속성 컨텍스트에 가져옴.(캐시에서 가져온다 생각)
엔티티 생명주기
비영속 (Transient) : 엔티티가 새로 생성되었지만 영속성 컨텍스트에 저장 X
영속 (Persistent) : 엔티티가 영속성 컨텍스트에 저장
준영속 (Detacghed) : 영속성 컨텍스트에서 분리된 상태
삭제 (Removed) : 엔티티가 삭제된 상태
변경 감지( Dirty Checking )
- 영속성 컨텍스트는 엔티티의 변경을 감지 , 트랜잭션이 커밋될 때 변경된 내용을 db에 저장
지연 로딩 ( Lay Loading )
- 연관된 엔티티를 필요할 때까지 로딩하지 않음.
em.flush()를 이용해서 강제로 db에 반영하는 것임.
그리고 em.clear()해서 테스트 하는이유가 캐시에서 엔티티를 제거하고 , 다음 호출할때 새로운 데이터를 가져오게 되는데
그게 join이 잘되었는지 확인하기 위해서 테스트 할 때 사용하는 것.
@Test
@DisplayName("장바구니 회원 엔티티 매핑 조회 테스트")
public void findCartAndMemberTest(){
Member member = createMember();
memberRepository.save(member);
Cart cart = new Cart(); // 카트 생성
cart.setMember(member); // 장바구니 주인 담음
cartRepository.save(cart); // 기능이용할려고 save 할려고 cart를
em.flush(); // 트랜잭션 끝날때 db반영 매니저로부터 강제 호출해서 저장하는 것임
em.clear(); // 실제 db에서 장바구니 엔티티를 가져 올 때 회원 엔티티도 같이 가져오는지 위해서 비워줌.
Cart savedCart = cartRepository.findById(cart.getId()) // 카트 생성해서 저장된 아이디 가져옴
.orElseThrow(EntityNotFoundException::new); //cart.getId 없으면 해당 익셉션 날리는 것
assertEquals(savedCart.getMember().getId(), member.getId());
}
MockMvc를 이용해서 테스트에 필요한 기능만 가지는 가짜 객체를 생성해서 테스트 하려고 했음.
근데 formLogin() 기능이 여기서도 먹히지 않음
security.test에서 사용하는데 현재 버전에서는 사용 안하는건가?
test 오류나서 인식 못함 추가했는데 왜 안될까..?
org.springframework.boot:spring-boot-starter-test:jar:6.3.0-SNAPSHOT was not found in https://repo.spring.io/snapshot during a previous attempt. This failure was cached in the local repository and resolution is not reattempted until the update interval of spring-snapshots has elapsed or updates are forced
org.springframework.boot:spring-boot-starter-test:jar:6.3.0-SNAPSHOT은 이전 시도 중에 https://repo.spring.io/snapshot에서 찾을 수 없습니다. 이 실패는 로컬 저장소에 캐시되었으며 스프링 스냅샷의 업데이트 간격이 경과되거나 업데이트가 강제될 때까지 해결이 다시 시도되지 않습니다.
그냥 -test로 추가해놓고 왜 안되는지 했음.. security-test 추가하니 잘 됨.
근데 formLogin은 현재 안되고 있어서 다른 방법으로 해결해야 함.
@Test
@DisplayName("Mock 가짜 로그인 성공 테스트")
public void MockLoginTest() throws Exception{
String email = "test@naver.com";
String password = "1234";
this.createMember(email, password);
mockMvc.perform(MockMvcRequestBuilders.post("/members/login")
.param("email" , email)
.param("password", password)
.andExpect(SecurityMockMvcResultMatchers.authenticated());
-- andExpect 사용 안됨
}
.andExpect 함수가 안돼서 같은 방법으로 테스트 불가능 왜 안될까?
andExpect는 ResultActions 객체의 메서드 중 하나임 요청에 대한 결과 검증하는데 사용