Spring/test

[테스트 코드] 테스트 코드 관련 어노테이션

라임온조 2023. 3. 8. 10:38

1. @SpringBootTest

1) 개념

통합 테스트를 위한 환경을 준비해준다. 모든 빈들을 스캔하고 애플리케이션 컨텍스트를 생성하여 테스트를 실행.

2. @Transactional

1) 개념

각각의 테스트를 실행할 때마다 트랜잭션을 시작하고 테스트가 끝나면 트랜잭션을 강제로 롤백한다. 따라서 테스트를 진행하면서 데이터베이스에 저장한 데이터가 테스트가 끝나면 롤백되므로 반복해서 테스트를 진행할 수 있다.

3. @Autowired

1) 개념

의존 관계를 자동으로 주입해준다

4. @Test

1) 개념

테스트를 수행하는 메소드를 의미. 각각의 테스트가 서로 영향을 주지 않고 독립적으로 실행됨을 원칙으로 @Test마다 객체를 생성.

5. @WebMvcTest

1) 개념

스프링은 특정 부분만 테스트할 수 있는 슬라이스 테스트(SliceTest)를 위한 어노테이션들을 제공하는데, 이는 컨트롤러를 테스트할 수 있는 환경을 준비한다. 애플리케이션 컨텍스트를 만들 때 컨트롤러와 연관된 빈들만을 제한적으로 찾아서 등록. 

2) 특징

  • @SpringBootTest와 같이 사용될 수 없다. 각자 서로의 MockMvc를 모킹하기 때문에 충돌이 발생하기 때문에.

6. @AutoConfigureMockMvc

1) 개념

2) 특징

  • 테스트 대상이 아닌 @Service나 @Repository사 붙은 객체들도 모두 메모리에 올림
  • 전체 애플리케이션 구성을 로드하고 MockMVC를 사용하려는 경우 @WebMvcTest보다 @AutoConfigureMockMvc와 결합된 @SpringBootTest를 고려해야 함 -> 단위테스트라기 보다는 전체 플로우를 테스트하는 것에 가까움

3) MockMvc

개념

컨트롤러를 테스트하고 싶을 때 실제 서버에 애플리케이션을 배포하지 않고 테스트용 MVC환경을 만들어서 요청, 전송, 응답기능을 확인할 수 있께 해주는 유틸리티 클래스

방법

@AutoConfigureMockMvc을 마킹하고 주입받으면 사용 가능

설정 메서드

  • param / params : 쿼리 스트링 설정
  • perform: HTTP 요청
  • cookie : 쿠키 설정
  • requestAttr : 요청 스코프 객체 설정
  • sessionAttr : 세션 스코프 객체 설정
  • content : 요청 본문 설정
  • header / headers : 요청 헤더 설정
  • contentType : 본문 타입 설정

검증 메서드

  • status : 상태 코드 검증
  • header : 응답 header 검증
  • content : 응답 본문 검증
  • cookie : 쿠키 상태 검증
  • view : 컨트롤러가 반환한 뷰 이름 검증
  • redirectedUrl(Pattern) : 리다이렉트 대상의 경로 검증
  • model : 스프링 MVC 모델 상태 검증
  • request : 세션 스코프, 비동기 처리, 요청 스코프 상태 검증
  • forwardedUrl : 이동대상의 경로 검증

기타 메서드

  • andDo() : print, log를 사용할 수 있는 메소드
  • print() : 실행결과를 지정해준 대상으로 출력, default = System.out
  • log() : 실행결과를 디버깅 레벨로 출력, 레벨은 org.springframework.test.web.servlet.result