이전 글에서 로그인 시 화면 이동을 체크하기 위해 DB에 직접 insert를 할 때, JpaAuditing에 오류가 있는 것 같다고 하였다.
/h2-console로 접속해 insert를 하면
createdDate랑 modifiedDate가 null로 떴기 때문이다.
JpaAuditing을 설정해두었으니, 자동으로 떠야 하는게 아닌가?라는 생각이었다.
그래서 test 코드를 작성해 테스트했다.
코드는 다음과 같다.
@Autowired
private UserInfoRepository userInfoRepository;
@Test
public void testJpaAuditing() throws Exception{
// given
UserInfo userInfo = new UserInfo("testUser", "password");
// when
userInfo = userInfoRepository.save(userInfo); // save user
// then
assertNotNull(userInfo.getUniqueid()); // id should be generated
assertNotNull(userInfo.getCreatedDate()); // createdAt should be set
assertNotNull(userInfo.getModifiedDate()); // updatedAt should be set
// Remember the initial modifiedDate
LocalDateTime initialModifiedDate = userInfo.getModifiedDate();
// update user info
LocalDateTime createdAt = userInfo.getCreatedDate();
userInfo.setUserpwd("newPassword");
userInfo = userInfoRepository.save(userInfo);
// createdAt should not change
assertNotNull(userInfo.getCreatedDate());
assertNotNull(userInfo.getModifiedDate());
assert createdAt.equals(userInfo.getCreatedDate()); // createdAt should not change
assertNotEquals(initialModifiedDate, userInfo.getModifiedDate());
}
우선, UserInfo 객체를 생성한다. id는 testUser, pwd는 password이다.
다음으로, userInfoRepository에 이 객체를 저장한다. 즉, JPA가 이 객체를 DB에 insert 하는 과정이다.
그 다음, uniqueid, created date, modified date가 생성된게 맞는지 체크한다.
여기서 assertNotNull()은 () 안의 내용이 null이면 error를 assert하며, not null이면 그냥 통과하게 된다.
(이렇게 자세히 적은 이유는,,assertNotNull이라고 하니까 not null이면, 그러니까 null이 아니면 assert한다고 이해해서 뭔가 이상한데..라고 생각해 찾아봤기 때문이당~)
처음 수정된 날짜가 뭐로 저장됐는지 initialModifiedDate에 저장해둔다. 이 값을 나중에 변경된 값과 비교하기 위해서이다.
마지막으로 userInfo 객체의 pwd를 변경해 다시 userInfoRepository에 save()하면, JPA가 primary key와 같은 entity의 식별자를 기반으로 DB에 update 해준다.
(나는 여기서 userInfo 객체를 변경해서 다시 save()해주면 새로운 행이 추가되는 것이 아닌지 걱정했는데, JPA는 애초에 그럴 걱정이 없었다는것...똑똑해!)
이걸 테스트하기 위해 createdAt.equals(userInfo.getCreatedDate())라고 해서 생성 날짜는 똑같은지를 체크했고, 아까 저장한 initialModifiedDate와 현재 바뀐 createdDate가 달라졌는지를 체크했다.
이 코드로 테스트한 결과, 모든 테스트를 통과했다.
그렇다면 문제가 무엇인가....라고 생각하던 중,,
JPA라는것 자체가 java 코드를 통해야 하는건데
DB에 직접 insert하는건 조작할 수 없는게 당연하지 않은가 라는 생각이 들었다...ㅋㅋㅋ
그래서 다음에는 회원가입 로직을 짜는걸로! 그리고 그걸로 또 테스트해보는걸로!
'개발 > Spring Boot' 카테고리의 다른 글
[로그인 기능 만들기] 10. login 인증(2) (0) | 2024.06.21 |
---|---|
[로그인 기능 만들기] 9. login 인증(1) (0) | 2024.05.30 |
[로그인 기능 만들기] 8. JPA를 사용한 DB 구현(2) (0) | 2024.05.27 |
[로그인 기능 만들기] 7. website login-form 만들기(3) (1) | 2024.05.24 |
[로그인 기능 만들기] 6. website login-form 만들기(2) (1) | 2024.05.24 |