본문 바로가기
Blog/TIL

2025-02-06 (목)

by 코젼 2025. 2. 6.
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?
        )

2️⃣ AnnotationTarget 종류와 @get:Url vs @field:Url

  • @get:UrlGetter에 적용
  • @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

댓글