티스토리 뷰

활동/교육과정 중 기록

200315 Spring Boot

Stolen Moments 2020. 3. 15. 20:45

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
링크
«   2025/06   »
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
글 보관함