티스토리 뷰
Spring Boot
스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - 2
- 간단한 API 만들기 (HelloController.java)
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "hello";
}
}
인텔리제이에서 우클릭 - Go To - Test를 누르면 간편하게 테스트 코드를 만들 수 있다.
- 테스트 코드 (HelloControllerTest.java)
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.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.status;
@RunWith(SpringRunner.class)
@WebMvcTest(controllers = HelloController.class)
public class HelloControllerTest {
@Autowired
private MockMvc mvc;
@Test
public void returnHello() throws Exception {
String hello = "hello";
mvc.perform(get("/hello"))
.andExpect(status().isOk())
.andExpect(content().string(hello));
}
}
@RunWith(SpringRunner.class)
- SpringRunner 라는 스프링 실행자를 사용한다. 스프링 부트 테스트와 JUnit 사이에 연결자 역할을 한다.
@WebMvcTest
- 여러가지 스프링 테스트 어노테이션이 있는데, 웹에 집중할 수 있는 어노테이션.
- 선언 시, @Controller, @ControllerAdvice 등을 사용할 수 있다.
- @Service, @Component, @Repository 는 사용할 수 없다.
@Autowired
- 스프링이 관리하는 빈(Bean)을 주입 받는다.
MockMvc mvc
- 웹 API를 테스트할 때 사용하며 HTTP GET, POST 등에 대한 API 테스트 가능.
- Gradle 4.10.2 다운그레이드 하기
책에서 4.10.2 버전 기준으로 설명을 해놓았기 때문에 다운그레이드를 해야했다.
터미널에서
gradlew wrapper --gradle-version 4.10.2
입력하면 다운그레이드가 된다.
- Lombok 설치
1. build.gradle에 의존성을 추가한다 => compile('org.projectlombok:lombok')
2. 인텔리제이 플러그인에서 Lombok을 검색해 설치한다.
3. 인텔리제이 재시작하면 오른쪽 하단 이벤트 로그에 경고창이 뜨는데 활성화 해준다.
- HelloResponseDto.java
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@Getter
@RequiredArgsConstructor
public class HelloResponseDto {
private final String name;
private final int amount;
}
@Getter : 선언된 모든 필드의 get 메소드를 생성해준다.
@RequireArgsConstructor : 선언된 모든 final 필드가 포함된 생성자를 생성해준다.
오오 롬복 오오
- HelloController.java
HelloController 에도 ResponseDto를 사용하도록 코드 수정
import com.springboot.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
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로 넘긴 파라미터를 가져오는 어노테이션
- HelloControllerTest.java
테스트 코드를 추가해보자.
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.*;
@RunWith(SpringRunner.class)
@WebMvcTest(controllers = HelloController.class)
public class HelloControllerTest {
@Autowired
private MockMvc mvc;
@Test
public void returnHello() throws Exception {
String hello = "hello";
mvc.perform(get("/hello"))
.andExpect(status().isOk())
.andExpect(content().string(hello));
}
@Test
public void returnHelloDto() 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)));
}
}
'활동 > 교육과정 중 기록' 카테고리의 다른 글
200318 Spring Boot (0) | 2020.03.18 |
---|---|
200316 Spring Boot (0) | 2020.03.16 |
200314 Spring Boot (0) | 2020.03.14 |
200211 React (0) | 2020.02.11 |
200207 React (0) | 2020.02.07 |
- Total
- Today
- Yesterday
- 자료구조
- 패스트캠퍼스
- #패스트캠퍼스 #프로그래밍대학생서포터즈 #올인원패키지 #컴퓨터공학 #성공하는프로그래밍공부법
- 올인원 패키지
- c언어
- 코딩 면접
- 개발자 취업
- 컴퓨터공학
- 운영체제
- 프로그래밍 온라인 강의
- Fast Campus
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |