본문 바로가기

Spring/Spring Boot(스프링 부트)

스프링 부트 API 빌드 & 테스트

728x90

스프링부트 앱을 만들고 컨트롤러를 만든 다음에 이 컨트롤러가 내가 원하는대로 잘 작동 하는지 테스트 하고 싶을 때가 있습니다.

 

그러면 주로 쓰는 방법이 스프링부트를 띄운다음에 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

 

GitHub - Kyeongrok/spring_boot_controller: 스프링부트 컨트롤러 예제

스프링부트 컨트롤러 예제. Contribute to Kyeongrok/spring_boot_controller development by creating an account on GitHub.

github.com

 

참고

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.

728x90
블로그 주인장입니다. 원하시는 정보는 얻으셨나요? 이 포스트에서 추가로 필요한 정보가 있으시면 여기에 남겨주세요.