블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.github.io/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
반응형
서비스 작성 MemberService.java
생성자 주입을 통해, MemberRepository
와 BCryptPasswordEncoder
를 주입한다.
BCryptPasswordEncoder
는 시큐리티에 Bean
을 생성했다. (아래 펼쳐서 확인)
더보기
@Configuration
@EnableWebSecurity
@EnableGlobalAuthentication
public class SecurityConfig extends WebSecurityConfigurerAdapter {
/**
* 비밀번호 암호화 인코딩 방식 정의
*
* @return BCryptPasswordEncoder BCrypt 단방향 암호화
*/
@Bean
public BCryptPasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
// ... 중략 ...
}
@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);
}
}
테스트 코드 작성 MemberServiceTest.java
참고
MemberRepository
: 회원 데이터를 관리하는Repository
객체Member
: 회원 정보를 담은Entity
객체
MemberService에 생성자에 MemberRepository
와 BCryptPasswordEncoder
를 넣어준다.
@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 하는 테스트 코드를 작성한다.
서비스에 대한 테스트를 하는 것이므로, Repository
는 Mock
객체로 생성한다.
@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 도 동일한 방법으로 테스트한다.
관련 글
2021/01/06 - [Spring/Spring Boot] - SpringBoot, Junit5에서 JPA Repository 테스트
2021/01/15 - [Spring/Spring Boot] - SpringBoot, Junit5에서 REST API(Controller) 테스트
반응형
'Backend > Spring Boot' 카테고리의 다른 글
Spring Boot 에서 JWT 적용 (Maven 환경) (0) | 2021.01.21 |
---|---|
SpringBoot, Junit5에서 REST API(Controller) 테스트 (0) | 2021.01.15 |
SpringBoot, Junit5에서 JPA Repository 테스트 (0) | 2021.01.06 |
Spring Boot, JPA에서 boolean 처리 (@Converter, @Convert 사용) (1) | 2021.01.05 |
Spring Boot 프로젝트에 h2 database 설정 (0) | 2021.01.05 |