2025/04/02 3

isDuplicate 속성을 가진 DTO가 isDuplicate, duplicate 응답하는 에러

✅ 상황 요약다음 DTO 선언:@Getter@AllArgsConstructorpublic class EmailDuplicateCheckResponse { @JsonProperty("isDuplicate") private boolean isDuplicate;}그런데 JSON 응답은 이렇게 두 개의 필드를 포함:{ "isDuplicate": false, "duplicate": false}❗ 문제의 원인@Getter를 사용하면 Lombok이 isDuplicate()라는 getter 메서드를 생성:public boolean isDuplicate() { return this.isDuplicate;}그런데 Jackson은 boolean 타입일 때 isX() 메서드로부터 자동으로 속성 이름을 추론..

Mock 테스트 중 엔티티 id 및 SecurityContextHolder 설정

@BeforeEachvoid setUp() { testUser = User.builder() .id(1L) // 오류 .email("test@example.com") .build(); User 엔티티는 id를 세팅할 수 있는 빌더가 없음. 그렇다고 AllArgsConstructor를 넣는 것은 위험함.따라서, 리플렉션을 이용해서 필드 값을 강제 설정. public class TestReflectionUtil { public static void setId(Object target, Long id) { try { Field field = target.getClass().getDeclaredField("id"); ..

Project/Boilerplate 2025.04.02

테스트에서 Entity vs DTO 이용

✅ 테스트에서 Request DTO를 사용하는 게 더 나은 경우🔹 테스트가 Controller → Service 흐름을 따를 때@WebMvcTest, MockMvc, 통합 테스트 등에서→ 실제 HTTP 요청처럼 흐름을 시뮬레이션하는 경우엔 CreatePostRequest DTO를 사용하는 게 자연스럽고, 검증이 더 현실적입니다.mockMvc.perform(post("/api/posts") .contentType(MediaType.APPLICATION_JSON) .content(objectMapper.writeValueAsString(new CreatePostRequest("제목", "내용")))) .andExpect(status().isOk());🟡 반면, 단위 테스트 ..