스프링 부트를 사용하지 않는 경우
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
데이터베이스의 트랜잭션이 잘 되는지 보기 위한 전용 테스트이다.