티스토리 뷰

spring 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.

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함