티스토리 뷰
롬복은 편하게 getter와 setter toString등 vo형태로 사용할 때에 필수로 사용하던 것들을 자동으로 만들어주는
어노테이션 라이브러리이다.
먼저 dto작성
package com.jojoldu.book.srpingboot.web.dto;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@Getter // 선언된 모든 필드의 get 메소드를 생성해 줍니다.
@RequiredArgsConstructor // 선언된 모든 final 필드가 포함된 생성자를 생성해 줍니다. final이 없는 필드를 생성자에 포함되지 않습니다.
public class HelloResponseDto {
private final String name;
private final int amount;
}
dto도 테스트를 해준다. test/java에 같은 패키지 형태로 HelloResponseDtoTest 클래스로 작성
package com.jojoldu.book.srpingboot.web.dto;
import org.junit.Test;
import static org.assertj.core.api.Assertions.assertThat;
public class HelloResponsDtoTest {
@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);
//1.assertThat라는 테스트 검증 라이브러리의 검증 메소드입니다.
// 검증하고 싶은 대상을 메소드 인자로 받습니다.
// 메소드 체이닝이 지원되어 isEqualTo와 같이 메소드를 이어서 사용할 수 있습니다.
//2.isEqualTo
// assertj의 동등 비교 메소드입니다.
// assertThat에 있는 값과 isEqualTo의 값을 비교해서 같을 때만 성공입니다.
}
}
테스트에 성공했다면
HelloController에서 메소드를 하나 더 만들어준다
package com.jojoldu.book.srpingboot.web;
import com.jojoldu.book.srpingboot.web.dto.HelloResponseDto;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController //컨트롤러를 JSON을 반환하는 컨트롤러로 만들어 줍니다.
public class HelloController {
@GetMapping("/hello") //http method인 get요청을 받을 수 있는 api를 만들어 줍니다.
public String hello(){
return "hello";
}
@GetMapping("/hello/dto")
public HelloResponseDto helloDto(@RequestParam("name")String name,
@RequestParam("amount")int amount
){
return new HelloResponseDto(name,amount);
}
}
이후 반복으로 테스트 코드작성
package com.jojoldu.book.srpingboot.web;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import static org.hamcrest.Matchers.is;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
// 1.**@RunWith(SpringRunner.class)**
// 테스트를 진행할 때 JUnit에 내장된 실행자 외에 다른 실행자를 실행시킵니다.
// 여기서는 SpringRunner라는 스프링 실행자를 사용합니다.
// 즉, 스프링 부트 테스트와 JUnit 사이에 연결자 역할을 합니다.
// ----------------------------------------------------------------------
// 2.**@WebMvcTest(controllers = HelloController.class)**
// 여러스프링 테스트 어느테이션 중 Web(SpringMvc)에 집중할 수 있는 어노테이션입니다.
// 선언할 경우 @Controller , @ControllerAdvice 등은 사용할 수 있습니다.
// 단 @Service@Component @Repository 등은 사용할 수 없습니다.
// 여기서는 컨트롤러만 사용하기 때문에 선언합니다.
@RunWith(SpringRunner.class) //1.
@WebMvcTest(controllers = HelloController.class)//2.
public class HelloControllerTest {
@Autowired // 스프링이 관리하는 빈(Bean)을 주입 받습니다.
private MockMvc mvc; // 웹 API를 테스트할 때 사용합니다. 스프링 MVC 테스트의 시작점입니다.
// 이 클래스를 통해 HTTP GET,POST 등에 대한 API 테스트를 할 수 있습니다.
@Test
public void hello가_리턴된다() throws Exception {
String hello = "hello";
//3.**MockMvc를 통해 /hello 주소로 HTTP GET 요청을 합니다. 체이닝이 지원되어 아래와 같이 여러검증 기능을 이어서 선언할 수 있습니다
mvc.perform(get("/hello")) // 3.
.andExpect(status().isOk())//4.
.andExpect(content().string(hello)); //5.
//4. andExpect(status().isOk()
// mvc.perform의 결과를 검증합니다.
// HTTP Header의 Status를 검증합니다.
// 우리가 흔히 알고 있는 200,404,500 들의 상태를 검증합니다.
// 여기선 OK 즉, 200인지 아닌지를 검증합니다
//5. andExpect(content().string(hello))
// mvc.perform의 결과를 검증합니다.
// 응답 본문의 내용을 검증합니다.
// Controller에서 "hello"를 리턴하기 떄문에 이 값이 맞는지 검증합니다.
}
@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)));
//1.param
// API 테스트 할 떄 사용될 요청 파라미터를 설정합니다.
// 단, 값은 String만 허용됩니다.
// 그래서 숫자/날짜 등의 데이터도 등록할 때는 문자열로 변경해야만 가능합니다.
//2.jsonPath
// JSON 응갑값을 필드별로 검증할 수 있는 메소드입니다.
// $를 기준으로 필드명을 명시합니다.
// 여기서는 name과 amount를 검증하니 $.name $.amount로 검증합니다.
}
}
'dev_공부일지 > spring boot + intelliJ' 카테고리의 다른 글
thymeleaf Object 표시, th:with 지역변수 사용 (0) | 2023.04.06 |
---|---|
thymeleaf escape unEscape (0) | 2023.04.02 |
lombok 설치하기 (0) | 2021.07.25 |
테스트 코드 작성, 내장 was (0) | 2021.07.24 |
1. intelliJ에 스프링부트 gredle로 설정하기 (0) | 2021.07.06 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 스프링부트
- JPA
- react실행
- reject
- 예외처리
- HTTP
- React
- 인터셉터
- 향해플러스백엔드
- hypertexttransferprotocol
- jpa api
- 항해플러스
- 로그인
- Java
- 백엔드 개발자 역량
- rejectValue
- 항해99
- filter
- 리터럴
- thymleaf
- 향해플러스
- exception
- 백엔드 개발자 공부
- SpringBoot
- 스프링공부
- Intercepter
- 향해99
- 컨트
- BindingResult
- ArgumentResolver
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
글 보관함