티스토리 뷰
스프링부트 앱을 만들고 컨트롤러를 만든 다음에 이 컨트롤러가 내가 원하는대로 잘 작동 하는지 테스트 하고 싶을 때가 있습니다.
그러면 주로 쓰는 방법이 스프링부트를 띄운다음에 localhost:8080을 띄우고 localhost:8080/deposit/ 이런식으로 api를 바로 콜하는 식으로 하는 경우가 많은데요
이 http request도 스프링부트 test에서 만들어주는 기능이 있어서 한번 해봅니다.
순서
1.소스코드
2.Project빌드
3.Controller추가
4.Vo형태로 리턴하는 Controller추가
5.List형태로 리턴하는 Controller추가
소스코드는 아래 리포지토리에 있습니다.
https://github.com/Kyeongrok/spring_boot_controller
참고
https://brunch.co.kr/@springboot/207
project빌드하기
롬복 추가 해줍니다.
적절한 위치에 만든다.
package하나 만들어줍니다.
controllers라는 이름으로 만들었습니다.
Controller클래스 하나 만들어줍니다.
package com.test.controllers;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(value = "/api/v1/order", produces = {MediaType.APPLICATION_JSON_UTF8_VALUE})
public class OrderController {
@GetMapping(value = "/")
public String getOrder() {
return "success";
}
}
소스코드는 위와 같습니다.
다 만들었으면 실행합니다.
localhost:8080/api/v1/order/를 호출하면 success가 나오면 됩니다.
이걸 test하는 코드를 만들어보겠습니다.
OrderController를 테스트하는 코드를 만든다.
OrderControllerTest로 이름 정했습니다.
OrderControllerTest.java
package com.test.controllers;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.test.context.junit4.SpringRunner;
import static org.junit.Assert.*;
@ExtendWith(SpringExtension.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class OrderControllerTest {
@Autowired
protected TestRestTemplate restTemplate;
@Test
public void testGetOrder() {
String body = this.restTemplate.getForObject("/api/v1/order/", String.class);
assertEquals("success", body);
}
}
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
이 줄을 넣어주어야 합니다.
String body = this.restTemplate.getForObject("/api/v1/order/", String.class);
이 코드가 실제로 컨트롤러로 테스트를 날리는 부분입니다.
Post Method test하기
@PostMapping(value = "/")
public String getOrderPost() {
return "success";
}
post method를 하나 추가 합니다.
@Test
public void testGetOrderPost() {
HttpEntity<String> request = new HttpEntity<>("");
String body = this.restTemplate.postForObject("/api/v1/order/",
request, String.class);
assertEquals("success", body);
}
test는 위와 같이 합니다.
Json으로 Return하기
API는 JSON형식을 많이 씁니다. Spring Boot를 이용하면 특별한 설정 없이 Object를 리턴하면 Json형태로 Response를 줍니다.
Order.java
id와 name만 있는 아주 간단한 형태의 Vo입니다.
@Getter
@Setter
public class Order {
private long id;
private String name;
}
OrderController.java
Return type을 위에서 만들어준 Order로 바꿔주기만 하면 됩니다.
@GetMapping(value = "/json")
public Order getOrder2(@RequestParam(name = "limit", defaultValue = "100" ) Integer limit) {
Order order = new Order();
order.setId(0);
order.setName("order1");
return order;
}
List로 리턴 하고 싶을 때
리턴 타입을 List로 감싸주고 List를 리턴 해주면 됩니다.
@GetMapping(value = "/json_list")
public List<Order> getOrderList(@RequestParam(name = "limit", defaultValue = "100" ) Integer limit) {
Order order = new Order();
order.setId(0);
order.setName("order1");
List l = new ArrayList();
l.add(order);
return l;
}
end.
'Spring > Spring Boot(스프링 부트)' 카테고리의 다른 글
Spring Boot Field Injection 피하기 (0) | 2018.12.20 |
---|---|
Spring Boot 앱 빌드하고 실행하기 with jpa, h2 (0) | 2018.12.11 |
스프링부트 spring.profiles.active에 default값 설정하기 (0) | 2018.11.16 |
Spring Boot Controller를 만들고 Test하기, Exception처리 (0) | 2018.08.17 |
spring boot logback 환경별(dev, qa, prod)설정, 끄는법 (2) | 2018.08.06 |
- Total
- Today
- Yesterday
- 도커티슈케이스
- shellscript
- 이직
- 싱가폴
- Sh
- docker container tissue box
- docker container tissue
- 도커티슈박스
- 도커각티슈박스
- vim
- docker container case
- 2017 티스토리 결산
- 도커컨테이너
- Linux
- 개발자
- 도커각티슈케이스
- docker container
- docker container whale
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |