본 포스트는 이동욱님의 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 책을 참고하여 작성하였습니다.
롬복을 활용하여 리팩토링을 해보자
Lombok (롬복) 이란?
롬복은 자바 개발할 때 자주 사용하는 코드 Getter, Setter 기본생성자, toString 등을 어노테이션으로 자동 생성 해주는 라이브러리다.
롬복으로 변경하고 문제가 생기는지 실제로 적용해보자!
먼저 Dto를 하나 생성한다.
HelloResponseDto.java
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@Getter
@RequiredArgsConstructor
public class HelloResponseDto {
private final String name;
private final int amount;
}
- @Getter
- 선언된 모든 필드의 get 메소드를 생성해 준다.
- @RequiredArgsConstructor
- 선언된 모든 final 피륻가 포함된 생성자를 생성해 준다.
- final이 없는 필드는 생성자에 포함되지 않는다.
적용된 롬복이 잘 작동하는지 테스트 코드를 작성 해보자
HelloResponseDtoTest.java
import org.junit.Test;
import static org.assertj.core.api.Assertions.assertThat;
public class HelloResponseDtoTest {
@Test
public void 롬븍_기능_테스트() {
// given
String name = "test";
int amount = 1000;
// when
HelloResponseDto dto = new HelloResponseDto(name, amount);
//then
assertThat(dto.getName()).isEqualTo(name);
assertThat(dto.getAmount()).isEqualTo(amount);
}
}
- assertThat
- assertj 라는 테스트 검증 라이브러리 메소드이다.
- isEqualTo
- assertj의 동등 비교 메소드이다.
- assertThat에 있는 값과 isEqualTo의 값을 비교해서 같을 때만 성공이다.
테스트 결과 정상적으로 기능이 수행된다.
롬복의 @Getter로 get 메소드가, @RequiredArgsConstructor로 생성자가 자동 생성되는것을 확인할 수 있다.
JUnit의 기본 assertThat이 아닌 assertj의 assertThat을 사용한 이유는 다음 블로그를 참조하자.
https://www.daleseo.com/assertj/
이제 HelloController에도 새로 만든 ResponseDto를 사용해보자.
HelloController.java
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "hello";
}
@GetMapping("/hello/dto")
public HelloResponseDto helloDto(@RequestParam("name") String name, @RequestParam("amount") int amount) {
return new HelloResponseDto(name, amount);
}
}
- @RequestParam
- 외부에서 API로 넘긴 파라미터를 가져오는 어노테이션
- @RequestParam("name")으로 넘긴 파라미터를 name(String name)에 저장하게 된다.
이제 추가된 API를 테스트하는 코드를 작성 해 보자.
HelloControllerTest.java
@RunWith(SpringRunner.class)
@WebMvcTest(controllers = HelloController.class)
public class HelloControllerTest {
@Autowired
private MockMvc mvc;
@Test
public void helloDTO가_리턴된다() throws Exception {
String name = "hello";
int amount = 1000;
mvc.perform(get("/hello/dto")
.param("name", name)
.param("amount", String.valueOf(amount)))
.andExpect(status().isOk())
.andExpect(jsonPath("$.name", is(name)))
.andExpect(jsonPath("$.amount", is(amount)));
}
}
- param
- API를 테스트할 때 사용될 요청 파라미터를 설정(String만 허용)
- jsonPath
- JSON 응답값을 필드별로 검증할 수 있는 메소드다.
- $를 기준으로 필드명을 명시한다.
JSON을 리턴하는 테스트가 통과하였다.
'공부 > Spring' 카테고리의 다른 글
스프링 부트에서 테스트 코드를 작성 (0) | 2022.06.18 |
---|