Develop/Spring

Spring MVC - Testing(2)

jaeyoungb 2022. 11. 9. 22:05

Hamcrest

JUnit 기반의 단위 테스트에서 사용할 수 있는 Assertion Framework이다.

  • Assertion을 위한 Matcher가 이해하기 쉬운 문장이므로, 가독성이 좋다.
  • 다양한 Matcher를 제공한다.
  • 테스트 실패 메시지를 이해하기 쉽다.

 

JUnit의 Assertion 메서드를 사용한 클래스를 Hamcrest의 Matcher를 이용한 클래스로 변환

JUnit의 Assertion 메서드를 사용한 클래스
Hamcrest의 Matcher를 이용한 클래스

 

Hamcrest의 Matcher를 이용한 코드 줄을 보면, 'assert that actual is equal to expected'라고 이어 읽을 수 있다.

'결과 값이 기대 값과 같다는 것을 검증한다'라고 해석할 수 있고, 이것이 가독성이 좋다는 것이다.

(Custom Matcher를 직접 구현해서 사용할 수도 있다)

 

 

 

Ref)

 

 

 

슬라이스 테스트(Slice Test)

각 계층에 구현해놓은 기능들이 잘 작동하는지 특정 계층만 잘라서 테스트하는 것을 말한다.

 

 

API 계층 테스트

테스트의 대상은 대부분 클라이언트의 요청을 받아들이는 핸들러인 Controller이다.

 

테스트를 위한 클래스 구조는 다음과 같다.

Controller 테스트를 위한 테스트 클래스 구조

 

  • @SpringBootTest 애너테이션이 Spring Boot 기반의 애플리케이션을 테스트하기 위한 Application Context를 생성해준다.
  • @AutoConfigureMockMvc 애너테이션은 Controller 테스트를 위한 애플리케이션의 자동 구성 작업을 해준다.
  • MockMvc는 Tomcat 같은 서버를 실행하지 않고, Spring 기반 애플리케이션의 Controller를 테스트할 수 있는 완벽한 환경을 제공해주는 일종의 Spring MVC 테스트 프레임워크이다.

 

 

Ref)

 

 

 

데이터 액세스 계층 테스트

이 계층의 테스트 같은 경우는, 테스트 종료 직전에 DB의 상태를 테스트 이전의 상태로 되돌려서 깨끗하게 만들 수 있도록 구현하는 것이 좋다.

 

Spring에서 데이터 액세스 계층을 테스트하기 위한 가장 핵심적인 방법은 @DataJpaTest 애너테이션을 적용하는 것이다.

이 애너테이션은 Repository의 기능을 정상적으로 사용하기 위한 Configuration을 Spring이 자동으로 해준다.

또, @Transaction 애너테이션을 포함하고 있기 때문에, 하나의 테스트 케이스 실행이 종료되는 시점에 데이터베이스에 저장된 데이터는 rollback 처리된다.

(Spring JDBC에서는 @JdbcTest, Spring Data JDBC에서는 @DataJdbcTest 사용)

 

 

 

Ref)