Spring docs - Spring Framework Testing Unit Testing 을 번역, 요약하고 설명을 추가함
Spring Web Reactive , JNDI 등 Spring MVC 와 관련 없는 일부 설명은 제외하였음
단위 테스트 : 순수 자바 객체를 테스트
애플리케이션을 구성하는 POJO(=자바로 생성하는 순수한 객체)는 Spring이나 다른 컨테이너 없이 새 연산자를 사용하여 인스턴스화된 객체를 사용하여 JUnit 또는 TestNG 테스트에서 테스트해야한다.
mock 객체 (다른 유용한 테스트 기법과 함께)를 사용하여 코드를 개별적으로 테스트할 수 있습니다. Spring의 아키텍처 권장 사항을 따르면 코드베이스의 깔끔한 계층화 및 구성 요소화로 인해 단위 테스트가 더 쉬워진다. 예를 들어, 단위 테스트를 실행하는 동안 영구 데이터에 액세스할 필요 없이 DAO 또는 리포지토리 인터페이스를 스터빙하거나 모킹하여 서비스 레이어 객체를 테스트할 수 있다.
진정한 단위 테스트는 일반적으로 설정할 런타임 인프라가 없기 때문에 매우 빠르게 실행된다. 개발 방법론의 일부로 실제 단위 테스트를 강조하면 생산성을 높일 수 있다. 테스트 챕터의 이 섹션이 필요하지 않을 수도 있지만, IoC 기반 애플리케이션에 대한 효과적인 단위 테스트를 작성하는 데 도움이 될 수 있다. 그러나 특정 단위 테스트 시나리오의 경우 Spring 프레임워크는 mock 객체와 테스트 지원 클래스를 제공하며, 이 장에서 설명한다.
Mock Objects
Spring에는 Mocking 전용 패키지가 다수 포함되어 있다:
- Environment : 테스트 환경 설정
- JNDI : JNDI datasource를 테스트할 때 사용
- Servlet API: Spring Web MVC 프레임워크를 테스트할 때 사용
- Spring Web Reactive : Spring WebFlux 애플리케이션을 테스트 할 때 사용
+ Spring Mvc에서 단위테스트를 할때는 Servlet API (+Environment)패키지를 사용하게 된다.
Unit Testing Support Classes
Spring에는 단위 테스트에 도움이 되는 여러 클래스가 포함되어 있다. 이 클래스는 크게 두 가지 범주로 나뉜다:
1. General Testing Utilities
2. Spring MVC 서비스 단위 테스트
1.General Testing Utilities
org.springframework.test.util 패키지에는 단위 및 통합 테스트에 사용할 수 있는 여러 범용 유틸리티가 포함되어 있다.
1.1. ReflectionTestUtils
리플렉션 기반 유틸리티 메서드의 모음
원래라면 접근 제한되었을 변수/메서드에 접근하고 수정/호출 할 수 있게 해준다.
상수
값을 변경하거나,private
필드를 설정하거나,private
setter 메서드를 호출하거나,non-public configuration
또는 수명 주기 콜백 메서드를 호출해야 하는 테스트 시나리오에서 사용- ORM 프레임워크 (Jpa,Hibernate 등) Domain Entity 의 private method를 테스트 할 때
private
,protected
필드에 종속성을 주입해주는 스프링 어노테이션들 (@Autowired, @Inject, and @Resource) 테스트 할 때- lifecycle callback methods를 위해 @PostConstruct and @PreDestroy 사용할 때
1.2. TestSocketUtils
통합 테스트 시나리오에서 사용할 수 있도록 로컬 호스트에서 사용 가능한 TCP 포트를 찾는 간단한 유틸리티이다. Spring MVC 테스트 유틸리티 org.springframework.test.web 패키지에는Spring MVC ModelAndView 객체를 처리하는 단위 테스트를 위해 사용할 수 있는 ModelAndViewAssert가 포함되어 있다 .
2. Spring MVC 서비스 단위 테스트
스프링을 실행하거나, 데이터베이스에 엑세스 하지 않는다.
DAO 또는 리포지토리 인터페이스를 스터빙하거나 모킹한다.
Spring MVC 컨트롤러를 테스트하는 방법
Spring MVC 컨트롤러 클래스에 대한 단위 테스트 (@WebMvcTest)→ Servlet API mocks 패키지를 사용(ModelAndViewAssert를 MockHttpServletRequest, MockHttpSession 등과 결합하여 사용)
Spring MVC 컨트롤러에 대한 통합 테스트 (@SpringBootTest) → Spring MVC 테스트 프레임워크를 사용
'spring' 카테고리의 다른 글
ReflectionTestUtils로 더미데이터 DB에 넣기 (0) | 2023.10.25 |
---|---|
컨트롤러 단위 테스트 방법 : @WebMvcTest (0) | 2023.10.24 |
메소드 인자에서 @NotNull 과 @NonNull (0) | 2021.12.24 |
[Lombok] 올바른 Lombok 사용법 - @Builder (0) | 2021.12.05 |
JPA (2) 엔티티 생명주기, 영속성 컨텍스트 (0) | 2021.09.18 |