티스토리 뷰
Spring Boot Controller를 만들고 Test하기, Exception처리
KyeongRok Kim 2018. 8. 17. 13:22spring boot 앱을 띄우고 controller를 테스트 해야 하는데 테스트 시나리오를 구성 해주어야 합니다.
그리고 spring boot는 db와 io 하는 코드가 많은데 이게 잘 되는지를 검증 해볼 필요가 있다.
과정
1.
특정 controller가 실행 되었을 때
해당 controller로 들어온 request body를 읽어서 다시 return해줍니다.
2.
만든 스프링부트 앱을 콜하면
스프링부트앱이 네이버에 콜을 보내서
받아온 값을
json으로 바꿔서
값을 뽑아서
3.
pojo에 저장하고
그걸 repository를 이용해 db에 저장
build.gradle
dependencies {
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '2.6.0'
testImplementation group: 'org.springframework.boot', name: 'spring-boot-starter-test', version: '2.6.0'
}
GET 파라메터가 없는 경우
ProductController.java
@RestController
@RequestMapping("/api/v1/product")
public class ProductController {
@GetMapping(value = "/")
public ResponseEntity<String> getOrder() {
return ResponseEntity.ok("GET");
}
}
GET 파라메터가 있는 경우
HelloController.java
@RestController
@RequestMapping("/v1")
public class HelloController {
@CrossOrigin
@GetMapping(value = "/hello")
public ResponseEntity<String> hello(@RequestParam(name="name", defaultValue = "World") String name) {
return ResponseEntity.ok(String.format("Hello, %s", name));
}
}
@RestController의 역할은 http요청과 Java메소드를 매핑 해줍니다.
위 컨트롤러를 호출하는 방법은 localhost:8080/v1/hello?name=kyeongrok 이렇게 호출 합니다. parameter를 받을 때 name으로 받도록 설정 했기 때문에 name으로 넘겨줍니다.
호출한 결과로 Hello, kyeongrok으로 나오면 됩니다.
HelloControllerTest.java
public class HelloControllerTest {
@Test
void hello() {
HelloController controller = new HelloController();
ResponseEntity<String> response = controller.hello("World");
System.out.println(response);
}
}
결과
<200 OK OK,hello, World,[]>
그런데 이게 db하고 io하는 거라서 검증이 쉽지 않다.
Exception처리
@ExceptionHandler를 이용하면 Exception을 따로 처리 할 수 있습니다.
@RequestMapping("/api/v1/product")
public class ProductController {
@GetMapping(value = "/")
public ResponseEntity<String> getOrder() {
if(true) throw new IllegalArgumentException("잘못된 호출입니다.");
return ResponseEntity.ok("GET");
}
@ExceptionHandler(Exception.class)
public ResponseEntity<?> exceptionHandler(Exception ex, HttpServletRequest request) {
return ResponseEntity.status(HttpStatus.ACCEPTED).body(new ErrorMessage(LocalDateTime.now(), "잘못된 호출 입니다."));
}
}
공통클래스에서 Exception처리
@RestControllerAdvice를 씁니다.
@RestControllerAdvice
public class ExceptionManager {
@ExceptionHandler(Exception.class)
public ResponseEntity<?> exceptionHandler(Exception ex, HttpServletRequest request) {
return ResponseEntity.status(HttpStatus.ACCEPTED).body(new ErrorMessage(LocalDateTime.now(), "잘못된 호출 입니다."));
}
}
@MockBean 테스트
http://wonwoo.ml/index.php/post/1020
MVC 유닛테스트
http://thswave.github.io/java/2015/03/02/spring-mvc-test.html
end.
'Spring > Spring Boot(스프링 부트)' 카테고리의 다른 글
스프링 부트 API 빌드 & 테스트 (0) | 2018.11.30 |
---|---|
스프링부트 spring.profiles.active에 default값 설정하기 (0) | 2018.11.16 |
spring boot logback 환경별(dev, qa, prod)설정, 끄는법 (2) | 2018.08.06 |
AWS Elastic Beanstalk용 Spring Boot 샘플 (0) | 2018.06.29 |
aws eb에서 spring boot안뜰 때 (0) | 2018.06.27 |
- Total
- Today
- Yesterday
- 도커티슈박스
- shellscript
- 개발자
- 도커컨테이너
- 도커각티슈케이스
- 싱가폴
- 도커각티슈박스
- 도커티슈케이스
- docker container tissue
- docker container whale
- docker container case
- 2017 티스토리 결산
- 이직
- Sh
- Linux
- docker container
- vim
- docker container tissue box
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |