RequestDto Test

iy·2024년 2월 24일
0

test코드를 학습하면서 각 계층에 대한 테스트 코드 과제를 받았다.
과제를 시작하면서 그저 데이터를 넘겨주는 역할을 하는 Dto 등의 테스트가 필요할지에 대한 의문이 들었다.

추후에 테스트 코드 특강을 들었는데 테스트 코드는 행위에 대해 작성해야 한다고 배웠다.

@Getter
@AllArgsConstructor
@NoArgsConstructor
public class SignupRequestDto {

    @NotBlank
    @Pattern(message = "최소 4자 이상, 10자 이하이며 알파벳 소문자(a~z), 숫자(0~9)를 이용해서 생성해주세요.",
    regexp ="^[a-z0-9]{4,10}")
    private String username;
    @NotBlank
    @Pattern(message = "최소 8자 이상, 15자 이하이며 알파벳 대소문자(a~z, A~Z), 숫자(0~9)를 이용해서 생성해주세요.",
    regexp = "^[a-zA-Z0-9]{8,15}")
    private String password;
    @Email
    @NotBlank
    private String email;
}

회원가입을 할 때 사용자 정보를 요청할 때 필요한 RequestDto다.
@Pattern, @NotBlank, @Email등으로 제약을 뒀다.
이런 경우 알맞은 데이터를 입력했는지 이 행위에 대한 DtoTest가 필요하다.

public class Data {
        static String username = "test0000";
        static String password = "test0000";
        static String email = "test0000@test.com";
        public static User testUser = new User(username,password,email);
...
}

Data 클래스에 테스트에 필요한 데이터들을 담아놨다.
현재 dtotest에 필요한 부분이다.

class SignupRequestDtoTest {

    ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
    Validator validator = validatorFactory.getValidator();

Dto 테스트에선 넘어오는 값이 유효한지가 중요하다. 이 유효성 검증을 위해 공통 부분에 ValidatorFactory를 생성해 실제 유효성 검사를 수행할 Validator를 얻어온다.


    @Test
    @DisplayName("사용자 요청 Dto 생성 성공")
    void 유저DTO생성성공() {
        // given
        SignupRequestDto signupRequestDto = new SignupRequestDto(Data.testUser.getUsername(),
            Data.testUser.getPassword(), "testtest@test.com");

        // when
        Set<ConstraintViolation<SignupRequestDto>> violations = validator.validate(signupRequestDto);

        // then
        Assertions.assertThat(violations).isEmpty();
    }
}

Data에 담아놓은 값들로 SignupRequestDto를 생성해주고 이 dto가 유효한지에 대해 유효성 검사를 해준다.
violations가 위배되지 않는다면 객체가 빈 값으로 검증 될 것이다.

해당 테스트가 성공한 것으로 보아 Dto 생성 성공 검증을 했다.

지금은 성공 테스트를 했지만 실패하는 경우의 테스트도 해봐야겠다.

0개의 댓글