본문으로 바로가기

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


그러면 주로 쓰는 방법이 스프링부트를 띄운다음에 localhost:8080을 띄우고 localhost:8080/deposit/ 이런식으로 api를 바로 콜하는 식으로 하는 경우가 많은데


이 http request도 스프링부트 test에서 만들어주는 기능이 있어서 한번 해본다.


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.*;
@RunWith(SpringRunner.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는 위와 같이 한다.


end.




댓글을 달아 주세요