Spring

JUnit5 컨트롤러 테스트 환경

JJJAEOoni 2022. 5. 31. 10:13
반응형

http 상태코드

 

정상 : 200

insert : 201

서버에러 : 500

클라이언트 요청잘못 : 400

인증안됨 : 403

 

컨트롤러를 테스트하는 방법은 여러가지가 있다.

 

1. 실제환경과 동일하게 테스트할 수 있다.

@SpringbootTest 어노테이션을 달아주면 전체가 메모리에 떠서 통합 테스트가 가능하다.

 

사실 컨트롤러에서 통합테스트 해버리면 테스트는 끝이다.

클라이언트가 요청할 수 있는곳은 컨트롤러밖에 없으니까!

 

2. 내가 원하는 컨트롤러, 서비스, 레파지토리만 분리해서 메모리에 올리고 테스트할 수 있다.

@SpringbootTest(class={BookApiController.class, BookService.class, BookRepository.class})

 

내가 BookService를 테스트할 때 UserRepository가 필요할 수도 있다.

어노테이션에 하나씩 적어주는게 더 헷갈릴 수 있다.

 

분리해서 테스트하면 가볍긴하지만 의존적인것을 모두 찾아서 주입해줘야하기 때문에 힘들다.

 

3. Controller, ControllerAdvice, Filter, WebMvcConfigurer(web.xml) : 컨트롤러 앞단 @WebMvcTest

 

컨트롤러에서는 배포 직전에 통합 테스트하는 것을 추천한다.

서비스와 레파지토리에서 실제로 서버를 실행해서 테스트 해봐야한다.

 


 

두가지 테스트를 진행해보자.

 

우선 BookApiControllerWebMvcTest.java

 

결국 진짜 서비스를 가져올필요는 없다. 추상화해서 다형성을 사용하여 가짜 서비스를 띄워 사용한다.

다형성을 활용한 기법이 Mockito이다.

 

Mock는 그냥 추상 메서드가 있는 껍데기이다. 인터페이스.

가짜객체! 인터페이스 구현체!

 

@Configuration 설정파일들이 IoC 컨테이너에 가장 먼저뜬다.

내부적으로 순서가 정해져있다.

 

디폴트 생성자가 있으면 아무것도 의존하지 않고 있다는 것인데 얘들을 가장 먼저 띄운다.

 

컴포지션하고있는 애들을 늦게 올린다.

 

컨트롤러, 서비스, 레파지토리도 당연히 레파지토리 -> 서비스 -> 컨트롤러순으로 올라간다.

 

컴포넌트 스캔에도 순서가 있는것이다.

 

 

 

[출처]

 

https://cafe.naver.com/metacoding

 

메타코딩 : 네이버 카페

코린이들의 궁금증

cafe.naver.com

메타 코딩 유튜브

https://www.youtube.com/c/%EB%A9%94%ED%83%80%EC%BD%94%EB%94%A9

 

메타코딩

문의사항 : getinthere@naver.com 인스타그램 : https://www.instagram.com/meta4pm 깃헙 : https://github.com/codingspecialist 유료강좌 : https://www.easyupclass.com

www.youtube.com

 
반응형