본문 바로가기

개발일지

20231201 - Dto 테스트

프로젝트를 완성 후 진행하지 않았던 테스트 코드를 작성해 보았다.

우선 Dto 클래스들의 테스트 코드를 작성했는데 여기서 생각해야 할 점이 데이터가 Json형식으로 @RequestBody를 통해  들어온다는 점과 유효성 검사가 잘 이루어지고 있는지를 체크해야 했다.

 

@Test
@DisplayName("비밀번호 변경을 위한 Dto")
void test2() throws Exception{
    ObjectMapper objectMapper = new ObjectMapper();

    //given
    String requestBody = "{\"originPassword\" : \"12345678\"," +
            "\"newPassword\" : \"123456789\"," +
            " \"newPasswordCheck\" : \"123456789\"}";

    //when
    MemberDto.UpdatePasswordRequestDto updatePasswordRequestDto = objectMapper.readValue(
        requestBody,
        MemberDto.UpdatePasswordRequestDto.class
    );

    assertEquals("12345678",updatePasswordRequestDto.getOriginPassword());
    assertEquals("123456789",updatePasswordRequestDto.getNewPassword());
    assertEquals(updatePasswordRequestDto.getNewPassword(),updatePasswordRequestDto.getNewPasswordCheck());

 

코드는 비밀번호 변경 때 받아오는 데이터들을 담는 Dto를 테스트하기 위한 코드이다.

Json형식의 데이터를 ObjectMapper를 통해 Java 객체로 변환해 주었다. 그리고 assertEquals를 이용해 의도한 결과가 나왔는지 확인했다.

여기서 한 가지 더 확인해야 할 것이 있는데, 비밀번호는 8~15자로 이루어져 있어야 한다. 이를 확인하기 위해


private static ValidatorFactory factory;
private static Validator validator;

@BeforeAll
public static void init(){
    factory = Validation.buildDefaultValidatorFactory();
    validator = factory.getValidator();
}

 

테스트 클래스에 필요한 설정을 해준 다음에 

 

Set<ConstraintViolation<MemberDto.UpdatePasswordRequestDto>> violations = validator.validate(updatePasswordRequestDto);
assertTrue(violations.isEmpty());

 

우선 데이터가 정상적으로 들어왔다면 violations에 아무 값도 들어가지 않을 것이고, assertTrue를 통해 확인할 수 있다.