본문 바로가기

Spring/Test

[Spring] [Test] 스프링 테스트 어노테이션들(@ExtendWith, @SpringBootTest 등)

스프링 부트를 사용하지 않는 경우

JUnit4

@RunWith

기존 테스트 클래스 위에 @RunWith(SpringJUnit4ClassRunner.class)를 붙입니다.

@RunWith 어노테이션은 JUnit이 제공하는 어노테이션입니다.

JUnit은 확장기능을 가지는데, 스프링에서는 JUnit을 확장하도록 SpringJUnit4ClassRunner.class를 제공합니다.

해당 코드는 JUnit이 테스트 코드를 실행할 때 스프링 빈 컨테이너가 내부적으로 생성되도록 합니다.

 

@ContextConfiguration

@ContextConfiguration(classes = {ApplicationConfig.class}) 내부적으로 생성된 스프링 빈 컨테이너가

사용할 설정파일을 지정할 때 사용합니다.

 

JUnit5

@ExtendWith

확장 기능을 제공하는 어노테이션입니다.

Spring을 사용할 경우 @ExtendWith(SpringExtension.class)와 같이 사용합니다.

 

@ContextConfiguration

동일함(내부적으로 생성된 스프링 빈 컨테이너가 사용할 설정파일을 지정할 때 사용합니다.)

 

스프링 부트를 사용하는 경우

JUnit5

@SpringBootTest

애플리케이션 전체를 로드하여 테스트한다.

 

즉, 실제 애플리케이션을 자신의 로컬 위에 올려서 포트 주소가 Listenting 되고 있는 상태이고, 실제 데이터베이스와 커넥션이 붙어있는 상태에서 진행되는 테스트이다.

전체를 로드해야 하므로, 규모가 큰 경우 오래 걸릴 수 있다.

 

전체를 로드한다는 뜻은, 스프링 컨테이너와 빈을 모두 로드한다는 뜻이므로, 스프링 부트를 사용하지 않을 때와 같이 @RunWith, @ContextConfiguration

를 사용하지 않아도 된다는 뜻이다!

 

@WebMvcTest

컨트롤러만을 로드하여 테스트한다.

 

@DataJpaTest

데이터베이스의 트랜잭션이 잘 되는지 보기 위한 전용 테스트이다.