photocard backend server 개발일기
Spring Junit5 통한 테스트 코드 작성
한둥둥
2024. 4. 5. 14:09
Junit5를 사용하여 테스트를 진행하였다.
이 때, 테스트는 Mockito를 사용한 단위 테스트로 진행하였다.
모키토는, 개발자가 동작을 직접적으로 제어할 수 있는 가짜 객체를 지원하는 테스트 프레임웍이다.
Spring 어플리케이션은 서로간에 의존성이 생기는데 , Mockito는 이러한 것을 방지할 수 있는 역할을 해준다.
package com.realworld.project.member;
import com.realworld.feature.member.domain.Member;
import com.realworld.feature.member.service.MemberCommandServiceImpl;
import com.realworld.feature.member.service.MemberQueryService;
import com.realworld.global.code.ErrorCode;
import com.realworld.global.config.exception.CustomMemberExceptionHandler;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.security.crypto.password.PasswordEncoder;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
@ExtendWith(MockitoExtension.class)
public class MemberServiceTest {
@InjectMocks
private MemberCommandServiceImpl memberCommandService;
@Mock
private MemberQueryService memberQueryService;
@Mock
private PasswordEncoder passwordEncoder;
@Test
@DisplayName("회원가입 패스워드 타당성 체크")
void passwordValidationCheck(){
// given
Member member = Member.builder()
.userId("test11")
.password("33")
.phoneNumber("0103333333")
.userEmail("test02@naver.com")
.build();
// when
CustomMemberExceptionHandler exception = assertThrows(CustomMemberExceptionHandler.class, () -> memberCommandService.saveMember(member));
// then
assertEquals(ErrorCode.PASSWORD_REQUEST_ERROR.getMessage() , exception.getMessage());
}
@Test
@DisplayName("회원가입 유저 아이디 타당성 체크")
void userIdValidationCheck(){
// given
Member member = Member.builder()
.userId("t")
.password("@Qwer1234")
.phoneNumber("0103333333")
.userEmail("test02@naver.com")
.build();
// when
CustomMemberExceptionHandler exception = assertThrows(CustomMemberExceptionHandler.class, () -> memberCommandService.saveMember(member));
// then
assertEquals(ErrorCode.VALIDATION_USERID_ERROR.getMessage(), exception.getMessage());
}
}
- @Mock : 해당 필드 객체를 Mock 객체로 생성한다.
- @InjectMocks : 생성한 Mock 객체를 해당 필드에 주입해 준다.