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 객체를 해당 필드에 주입해 준다.