728x90
반응형
🚀 오늘의 배운 점 정리
✔ @Valid
는 내부 객체에는 @field:Valid
가 필요!
✔ @field:Url
을 사용해야 Validation이 정상적으로 동작.
✔ shouldContainExactly
로 검증 메시지를 정확하게 체크하는 것이 좋음.
✔ 테스트 코드에서 요청 객체를 함수로 만들어 중복을 줄이면 가독성이 좋아짐.
1️⃣ Kotlin Validation에서 @Valid 사용 시 내부 객체 적용 방법
@Valid
는@RequestBody
에 붙이면 자동 검증되지만, 내부 객체(data class
안의data class
)에도 검증을 적용하려면 필드 레벨에서@field:Valid
를 추가해야 한다.- @ResponseBody @Valid request: RequestDTO (1차 객체)
- RequestDTO > TestDTO (2차 객체)
data class TestDTO( @field:Valid val ios: Ios?, val aos: Aos?, @field:Valid val web: Web? )
- RequestDTO > TestDTO (2차 객체)
- @ResponseBody @Valid request: RequestDTO (1차 객체)
2️⃣ AnnotationTarget 종류와 @get:Url vs @field:Url
@get:Url
→ Getter에 적용@field:Url
→ 필드에 적용 (일반적으로 Spring Validation에서는@field:Url
을 사용해야 검증이 정상 동작)- 내부 객체에도
@field:Valid
를 추가해야 전체 검증이 적용됨.
3️⃣ Kotest에서 shouldContainExactly
를 사용하는 이유
- 기존 방식: 단순히 특정 메시지가 하나라도 존재하는지를 검사함.
violations.any { it.message == "예외 메시지" } shouldBe true
- 개선된 방식: 메시지가 정확히 이 목록과 일치하는지 확인 → 예상치 못한 메시지가 추가될 경우 감지 가능.
violations.map { it.message } shouldContainExactly listOf("예외 메시지")
4️⃣ Kotest에서 유효한/유효하지 않은 요청을 함수로 관리하는 방법
- 중복된 요청 객체 생성을 줄이기 위해 함수로 분리하면 테스트 코드가 깔끔해짐.
fun createRequest(a: String? = null, b: String? = null) = TestDTO.Request ( a = a?.let { DevDTO.a(a = it) }, b = b?.let { DevDTO.b(b = it) }, c = null )
🔥 오늘도 성장했다! 🔥
728x90
반응형
'Blog > TIL' 카테고리의 다른 글
2025-02-11 (화) (0) | 2025.02.11 |
---|---|
2025-02-10 (월) (0) | 2025.02.10 |
2025-02-05 (수) (0) | 2025.02.05 |
2025-02-04 (화) (2) | 2025.02.04 |
2025-02-03 (월) (2) | 2025.02.03 |
댓글