-
Spring boot Entity test codeComputer Science/Spring boot 2022. 10. 7. 01:19
@NoArgsConstructor @Entity @Getter @Table(name = "lof_user") @TypeDef(name = "json", typeClass = JsonStringType.class) public class UserEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") private Long userId; @NotNull @Column(name = "token") private String fcmToken; @NotNull @Column(name = "email") private String email; @NotNull @Column(name = "nickname") private String nickname; @NotNull @Column(name = "profile_img") private String profileImg; @Type(type = "json") @Column(name = "team_list" ,columnDefinition = "json") private List<Long> teamList = new ArrayList<>(); @Type(type = "json") @Column(name = "league_list" ,columnDefinition = "json") private List<Long> leagueList = new ArrayList<>(); @Type(type = "json") @Column(name = "selected", columnDefinition = "json") private Map<Long, Boolean> userSelected = new HashMap<>(); public void setFcmToken(String fcmToken) { this.fcmToken = fcmToken; } public void setEmail(String email) { this.email = email; } public void setNickname(String nickname) { this.nickname = nickname; } public void setProfileImg(String profileImg) { this.profileImg = profileImg; } public void setTeamList(List<Long> teamList) { this.teamList = teamList; } public void setLeagueList(List<Long> leagueList) { this.leagueList = leagueList; } public void setUserSelected(Map<Long, Boolean> userSelected) { this.userSelected = userSelected; } @Builder public UserEntity(String fcmToken, String email, String nickname, String profileImg, List<Long> leagueList) { this.fcmToken = fcmToken; this.email = email; this.nickname = nickname; this.profileImg = profileImg; this.leagueList = leagueList; } }
실험할 userEntity 이다.
위에서 언급 하고 싶은 건 @NotNull 어노테이션 정도이다.
@Column(name = "token" , nullable = false)
nullable 을 사용하지 않고
implementation 'org.springframework.boot:spring-boot-starter-validation'
validation 까지 추가해주면서 NotNull 어노테이션을 붙이는 것은 더욱 안정성이 좋기 때문이다.
nullable은 db column을 null값이 불가능하게 설정을 하여서 만약 null값이 entity에 들어갔다면 db 차원에서 쿼리가 들어왔을 때 오류를 던져준다.
하지만 @NotNull 어노테이션은 쿼리가 던져지기 전 단계에서 null값을 판단을 하여서 더욱 빠른 단계에서 예외처리가 가능하다.
더욱이 @NotNull 어노테이션은 nullable = false 기능까지 기본으로 들어가있으니 상위 호환이라고 할 수 있다.
본문으로 돌아와서
@Test @DisplayName("userEntity 생성 테스트") void createUserEntity() { //given String fcmToken = "token"; String email = "email"; String nickname = "nickname"; String profileImage = "profileImage"; List<Long> leagueIdList = List.of(1L, 2L, 3L); //when UserEntity userEntity = UserEntity.builder() .fcmToken(fcmToken) .email(email) .nickname(nickname) .profileImg(profileImage) .leagueList(leagueIdList) .build(); //then assertThat(userEntity.getFcmToken()).isEqualTo(fcmToken); assertThat(userEntity.getEmail()).isEqualTo(email); assertThat(userEntity.getNickname()).isEqualTo(nickname); assertThat(userEntity.getProfileImg()).isEqualTo(profileImage); assertThat(userEntity.getLeagueList()).isEqualTo(leagueIdList); }
userEntity 가 잘 생성이 되었는지 test와 함께 setter 함수 작동 여부까지 test 코드를 만들어 주었다.
@Test @DisplayName("userEntity setter 테스트") void setUserEntity() { //given String fcmToken = "token"; String email = "email"; String nickname = "nickname"; String profileImage = "profileImage"; List<Long> leagueIdList = List.of(1L, 2L, 3L); UserEntity userEntity = UserEntity.builder() .fcmToken(fcmToken) .email(email) .nickname(nickname) .profileImg(profileImage) .leagueList(leagueIdList) .build(); //when String newFcmToken = "newToken"; String newEmail = "newEmail"; String newNickname = "newNickname"; String newProfileImage = "newProfileImage"; List<Long> newLeagueIdList = List.of(4L, 5L, 6L); userEntity.setFcmToken(newFcmToken); userEntity.setEmail(newEmail); userEntity.setNickname(newNickname); userEntity.setProfileImg(newProfileImage); userEntity.setLeagueList(newLeagueIdList); //then assertThat(userEntity.getFcmToken()).isEqualTo(newFcmToken); assertThat(userEntity.getEmail()).isEqualTo(newEmail); assertThat(userEntity.getNickname()).isEqualTo(newNickname); assertThat(userEntity.getProfileImg()).isEqualTo(newProfileImage); assertThat(userEntity.getLeagueList()).isEqualTo(newLeagueIdList); }
'Computer Science > Spring boot' 카테고리의 다른 글
Servlet & DispatcherServlet (0) 2023.07.18 Pinpoint를 이용하여 서버 관리하기. (0) 2022.11.12 Spring boot DB 한글 깨짐 현상 (0) 2022.10.06 Spring boot 생성자 주입으로 사용해야 하는 이유 (0) 2022.10.06 Spring boot api test code (0) 2022.10.06