memostack
article thumbnail
블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.github.io/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
반응형

1. 서비스 작성 MemberService.java

생성자 주입을 통해, MemberRepositoryBCryptPasswordEncoder를 주입한다.

BCryptPasswordEncoder는 시큐리티에 Bean을 생성했다. (아래 펼쳐서 확인)

더보기
<java />
@Configuration @EnableWebSecurity @EnableGlobalAuthentication public class SecurityConfig extends WebSecurityConfigurerAdapter { /** * 비밀번호 암호화 인코딩 방식 정의 * * @return BCryptPasswordEncoder BCrypt 단방향 암호화 */ @Bean public BCryptPasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } // ... 중략 ... }
<java />
@Service public class MemberService { private final MemberRepository memberRepository; private final BCryptPasswordEncoder passwordEncoder; public MemberService(MemberRepository memberRepository, BCryptPasswordEncoder passwordEncoder) { this.memberRepository = memberRepository; this.passwordEncoder = passwordEncoder; } /** * Member 를 insert 하는 메소드 * * @param member 사용자 정보를 가지고 있는 Member 객체 * @return Member 저장 완료된 사용자의 정보를 반환 */ public Member insertMember(Member member) { member .setActive(true) // 유저 활성화 .setRegisterAt(LocalDateTime.now()) // 회원가입일 .setPassword(passwordEncoder.encode(member.getPassword())); // 비밀번호 암호화 return memberRepository.save(member); } }

 

2. 테스트 코드 작성 MemberServiceTest.java

참고

  • MemberRepository: 회원 데이터를 관리하는 Repository 객체
  • Member: 회원 정보를 담은 Entity 객체

 

MemberService에 생성자에 MemberRepositoryBCryptPasswordEncoder를 넣어준다.

<java />
@ExtendWith(MockitoExtension.class) @DisplayName("MemberService 테스트") class MemberServiceTest { @Mock private MemberRepository memberRepository; private BCryptPasswordEncoder passwordEncoder; private MemberService memberService; @BeforeEach void setUp() { this.passwordEncoder = new BCryptPasswordEncoder(); // 비밀번호 암호화를 위해.. this.memberService = new MemberService(memberRepository, passwordEncoder); } }

 

insert 하는 테스트 코드를 작성한다.

서비스에 대한 테스트를 하는 것이므로, RepositoryMock 객체로 생성한다.

<java />
@Test @DisplayName("insert() 테스트") void insetTest() { // given final LocalDateTime now = LocalDateTime.now(); final Member member = Member.builder() .email("test@naver.com") .password("1234") .name("테스트 유저") .phone("010-1234-5678") .isActive(true) .registerAt(now) .build(); given(memberRepository.save(member)) .willReturn( Member.builder() .id(1L) .email("test@naver.com") .password(passwordEncoder.encode("1234")) .name("테스트 유저") .phone("010-1234-5678") .isActive(true) .registerAt(now) .build()); // when final Member savedMember = memberService.insertMember(member); // then assertEquals(1L, savedMember.getId()); assertEquals("test@naver.com", savedMember.getEmail()); assertTrue(passwordEncoder.matches("1234", savedMember.getPassword())); }

테스트 성공

 

나머지 select, update, delete 도 동일한 방법으로 테스트한다.

 


3. 관련 글

2021/01/06 - [Spring/Spring Boot] - SpringBoot, Junit5에서 JPA Repository 테스트

 

SpringBoot, Junit5에서 JPA Repository 테스트

사전 준비 테스트를 위해, Entitiy와 Repository를 생성한다. Entity 생성 Role.java @Entity @Table(name = "role") @Getter @Builder @NoArgsConstructor @AllArgsConstructor(access = AccessLevel.PROTECTED)..

memostack.tistory.com

2021/01/15 - [Spring/Spring Boot] - SpringBoot, Junit5에서 REST API(Controller) 테스트

 

SpringBoot, Junit5에서 REST API(Controller) 테스트

REST API 테스트 Rest API를 테스트할 때는 @WebMvcTest 어노테이션을 사용한다. MockMvc 를 생성할때는 MockMvcBuilders 를 사용하여 생성한다. 다른 방법으로 MockMvcBuilders 를 사용하지 않고, MockMvc에 @Aut..

memostack.tistory.com

 

반응형
블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.github.io/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
profile

memostack

@bluemiv_mm

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!