-
JDBC Template을 이용한 회원정보 변경 기능 구현(3)Spring 2023. 2. 24. 09:05
이번에 해볼 것은 닉네임 변경하기다.
Member
기존의 Member Entity에 아래 메서드를 추가해준다.
정보를 변경하는 것에 다양한 방법이 있겠지만 객체와 관련된 것은 함께 묶어주는 것이 유지보수에 더 좋을 것 같다.
public void changeNickname(String to) { Objects.requireNonNull(to); validateNickname(to); nickname = to; }
Objects.requireNonNull 로 other가 null이 되지 않도록 확인해준다.
또한 닉네임의 길이가 10자가 넘지 않도록 기존에 만들었던 validator로 검증해준다.
이제 만든 로직을 테스트 해보자.
Create Member Object in Test
테스트를 진행하기 위해 Member 객체를 생성해야 한다.
테스트를 진행할 메서드 안에서 Member 객체를 생성해 주는 방법도 있지만, 테스트 개수가 많아지면 Member 객체를 생성하는 코드가 중복이 된다.
따라서 Member 객체를 생성하는 코드를 분리해 보도록 하자.
public static Member create() { return Member.builder() .email("string") .nickname("string") .createdAt(LocalDateTime.now()) .birthDay(LocalDate.now()) .build(); }
가장 먼저 생각 나는 것은 기존 Member 객체를 생성 하는 것처럼 Builder를 사용한 생성 방법이다.
하지만 우리가 사용해야 할 멤버 객체는 다수가 될 수 있다.
따라서 이번에는 EasyRandom을 사용해 보자.
public static Member create() { var param = new EasyRandomParameters(); return new EasyRandom(param).nextObject(Member.class); }
만든 Member 객체가 제대로 생성이 되는지 확인해보자.
@Test @DisplayName("회원은 닉네임을 변경할 수 있다.") public void testChangeName() { IntStream.range(0, 10) .mapToObj(i -> MemberFixtureFactory.create()) .forEach(member -> { System.out.println(member.getNickname()); }); }
생성 결과 같은 Member 객체가 10 생성 되었다.
EasyRandom은 Seed를 통해 객체를 생성하므로, 위와 같이 동일한 Seed를 주게 될 경우 동일한 객체가 생성된다.
따라서 각 Member를 다르게 하기 위해 Seed를 변경해 주도록 하자.
먼저 기존의 Member 생성 메서드를 수정하자.
static public Member create(Long seed) { var param = new EasyRandomParameters().seed(seed); return new EasyRandom(param).nextObject(Member.class); }
EasyRandom의 seed라는 메서드로 seed를 직접 주입할 수 있다.
create에 seed parameter를 받아 직접 seed를 넣도록 하겠다.
@Test @DisplayName("회원은 닉네임을 변경할 수 있다.") public void testChangeName() { LongStream.range(0, 10) .mapToObj(MemberFixtureFactory::create) .forEach(member -> { System.out.println(member.getNickname()); }); }
아래와 같이 서로 다른 객체를 반환하는 것을 확인할 수 있다.
Update Member Object
이제 Member 수정을 위한 테스트 준비가 끝이 났다.
실질적으로 Member 객체를 수정해보도록 하자.
매번 seed를 주입하기에는 귀찮으니까 parameter를 주입하지 않는 것도 추가 생성해준다.
static public Member create() { var param = new EasyRandomParameters(); return new EasyRandom(param).nextObject(Member.class); }
@Test @DisplayName("회원은 닉네임을 변경할 수 있다.") public void testChangeName() { var member = MemberFixtureFactory.create(); var toChangeName = "temp"; member.changeNickname(toChangeName); Assertions.assertEquals(toChangeName, member.getNickname()); }
성공적으로 테스트가 끝났다.
추가적으로 닉네임의 길이를 검증하는 것도 해보도록 하자.
@Test @DisplayName("회원의 닉네임은 10자를 초과할 수 없다..") public void testNicknameMaxLength() { var member = MemberFixtureFactory.create(); var overMaxLengthName = "temptemptemp"; Assertions.assertThrows(IllegalArgumentException.class, () -> member.changeNickname(overMaxLengthName)); }
마찬가지로 성공했다.
'Spring' 카테고리의 다른 글
Java, Database, Synchronized 등 다양한 동시성 제어 방법 in Java (1) (0) 2023.03.21 Java 접근제한자와 entity 설계(getter/setter, lombok) (0) 2023.03.07 JDBC Template을 이용한 회원정보 변경 내역 저장 (4) (0) 2023.02.25 JDBC Template을 이용한 회원정보 조회 기능 구현(2) (0) 2023.02.23 JDBC Template을 이용한 회원정보 등록 구현 (1) (0) 2023.02.22