Lombok 설정 및 테스트
- VO(DTO) 생성 시 Getter, Setter, Contructor, toString 등을 어노테이션으 자동 생성
build.gradle dependency 추가
- lombok 의존성 추가
dependencies {
compile('org.springframework.boot:spring-boot-starter-web')
compile("org.projectlombok:lombok")
testCompile('org.springframework.boot:spring-boot-starter-test')
}
lombok plugin 설치
- lombok plugin 설치
lombok 설정
- lombok 플러그인은 한 번만 설치
- build.gradle에 라이브러리 추가와 Enable annotation.processing체크는 프로젝트마다 설정해야 한다.
lombok으로 Refactoring
- web 패키지에 dto 패키지를 추가
-
dto 패키지에 HelloResponseDto 추가
-
@Getter
- 선언된 모든 필드의 get 메서드를 생성
-
@RequiredArgsContructor
-
선언된 모든 final 필드가 포함된 생성자를 생성
-
final이 없는 필드는 생성자에 포함되지 않는다.
-
-
@Getter
@RequiredArgsConstructor
public class HelloResponseDto {
private final String name;
private final int amount;
}
lombok 테스트
-
테스트 코드
- assertThat
- assertj라는 테스트 검증 라이브러리의 검증 메서드
- 검증하고 싶은 대상을 메서드 인자로 받는다.
- 메서드 체이닝이 지원되어 isEqualTo와 같이 메서드를 이어서 사용할 수 있다.
- isEqualTo
- assertj의 동등 비교 메서드
- assertThat에 있는 값과 isEqualTo의 값을 비교해서 같은 경우 성공
- assertThat
-
assetj vs Junit
- CoreMatchers와 달리 추가적으로 라이브러리가 필요하지 않다.
- Junit의 assertThat을 쓰게 되면 is()와 같이 CoreMatchers 라이브러리가 필요하다.
- 자동완성이 좀 더 확실하게 지원
- IDE에서는 CoreMatchers와 같은 Matcher 라이브러리의 자동완성 지원이 약하다.
- CoreMatchers와 달리 추가적으로 라이브러리가 필요하지 않다.
-
HelloResponseDtoTest
- given, when, then의 순서로 테스트 코드를 작성
- Given
- HelloResponseDto 클래스에 생성자로 주입될 값을 설정
- 테스트 기반 환경을 구축하는 단계
- When
- HelloResponseDto 클래스 생성 및 초기화
- 테스트 하고자 하는 행위 선언
- Then
- 테스트의 결과를 검증
- assertThat 메서드를 통해 HelloResponseDto instance의 name, amount의 값을 확인
- assertThat 성공으로 lombok의 @Getter를 통해 get 메서드, @RequiredArgsContructor로 생성자가 자동으로 생성
import org.assertj.core.api.Assertions;
import org.junit.Test;
public class HelloResponseDtoTest {
@Test
public void lombok_test() {
// Given
String name = "test";
int amount = 1000;
// when
HelloResponseDto dto = new HelloResponseDto(name, amount);
// then
Assertions.assertThat(dto.getName()).isEqualTo(name);
Assertions.assertThat(dto.getAmount()).isEqualTo(amount);
}
}
HelloController에 ResponseDto 사용
- HelloController
- @RequestParam
- 외부에서 API로 넘긴 파라미터를 가져오는 어노테이션
- name (@RequestParam("name"))이란 이름으로 넘긴 파라미터를 메서드 파라미터 name(String name)에 저장
- @RequestParam
@RestController
public class HelloController {
...
@GetMapping("/hello/dto")
public HelloResponseDto helloDto(
@RequestParam("name") String name,
@RequestParam("amount") int amount) {
return new HelloResponseDto(name, amount);
}
}
HelloController 테스트
- HelloControllerTest
- param
- API 테스트 할 때 요청 파라미터를 설정
- 단, 그 값은 String만 허용
- 숫자/날짜 등의 데이터도 등록하는 경우 문자열로 변경이 필요 (String.valueOf(value))
- jsonPath
- JSON 응답값을 필드별로 검증할 수 있는 메서드
- $를 기준으로 필드명을 명시
- 여기서는 name, amount를 검증하니 $.name, $.amount로 검증
- param
@RunWith(SpringRunner.class)
@WebMvcTest
public class HelloControllerTest {
@Autowired
private MockMvc mvc;
...
@Test
public void return_helloDto() throws Exception {
String name = "hello";
int amount = 1000;
mvc.perform(
get("/hello/dto")
.param("name", name)
.param("amount", String.valueOf(amount))
)
.andDo(print())
.andExpect(status().isOk())
.andExpect(jsonPath("$.name", is(name)))
.andExpect(jsonPath("$.amount", is(amount)));
}
}
- 결과 테스트
- MockHttpServletResponse.Body
MockHttpServletResponse:
Status = 200
Error message = null
Headers = [Content-Type:"application/json;charset=UTF-8"]
Content type = application/json;charset=UTF-8
Body = {"name":"hello","amount":1000}
Forwarded URL = null
Redirected URL = null
Cookies = []
'Spring > SpringBoot' 카테고리의 다른 글
[SpringBoot] Posts API 만들기 (2) | 2020.05.28 |
---|---|
[SpringBoot] 설정파일 yaml로 변경하기 (0) | 2020.05.28 |
[SpringBoot] Spring Data JPA 설정 (0) | 2020.05.28 |
[SpringBoot] UnitTest 환경 만들기 (0) | 2020.05.27 |
[SpringBoot] IntelliJ에서 SpringBoot시작하기 (0) | 2020.05.27 |