반응형
문제
테스트 코드를 작성할 때, 로그인 및 회원가입에 쓰이는 AuthRequestDto 는 username과 password를 필드로 가지고 있고, validation 라이브러리로 검증하도록 했다. 하지만 컨트롤러에서 @Valid 로 검증하는 탓에, 테스트에서 직접 값을 넣으면 아무 예외도 발생하지 않는 문제가 있었다.
@DisplayName("유효하지 않은 username 및 password 요청")
@Test
void validate_invalid_username() {
// given
String username = "us";
String password = "1234";
// when & then
assertThrows(MethodArgumentNotValidException.class, () -> new AuthRequestDto(username, password));
}
이렇게 짜니까,
아무것도 예외를 던지지 않았다고 나온다.
해결
Validator를 선언해서 검증하면 된다.
import static org.junit.jupiter.api.Assertions.*;
import java.util.Set;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import jakarta.validation.ConstraintViolation;
import jakarta.validation.Validation;
import jakarta.validation.Validator;
import jakarta.validation.ValidatorFactory;
@DisplayName("로그인 및 회원가입 요청 DTO 테스트")
class AuthRequestDtoTest {
private Validator validator;
@BeforeEach
public void setUp() {
try (ValidatorFactory factory = Validation.buildDefaultValidatorFactory()) {
validator = factory.getValidator();
}
}
@DisplayName("유효하지 않은 username 및 password 요청")
@Test
void validate_invalid_username() {
// given
String username = "us";
String password = "1234";
AuthRequestDto authRequestDto = new AuthRequestDto(username, password);
// when
Set<ConstraintViolation<AuthRequestDto>> violations = validator.validate(authRequestDto);
// then
assertEquals(2, violations.size());
}
}
짠!
참고 링크
반응형
'TIL ✍️' 카테고리의 다른 글
23년 12월 5일(화요일) - 45번째 TIL : AOP (1) | 2023.12.05 |
---|---|
23년 12월 4일(월요일) - 44번째 TIL (2) | 2023.12.04 |
23년 11월 30일(목요일) - 42번째 TIL (0) | 2023.11.30 |
23년 11월 29일(수요일) - 41번째 TIL (1) | 2023.11.29 |
23년 11월 28일(화요일) - 40번째 TIL (0) | 2023.11.28 |