본문 바로가기

스프링

스프링 테스트 - JUnit의 생명주기와 주요 어노테이션

참고출처 - https://www.youtube.com/watch?v=SFVWo0Z5Ppo

 

JUnit - 생명 주기

- JUnit은 어노테이션으로 생명 주기별 테스트 작성을 지원

- @Test : 테스트용 메소드를 표현 (메인 코드 테스트)

- @BeforeEach: @Test의 각 Unit 테스트들이 실행되기 전 실행

- @AfterEach: 각 Unit 테스트들이 실행된 후 실행

- @BeforeAll: JUnit의 테스트 생명주기 가장 처음 실행

- @AfterAll: JUnit의 테스트 생명주기 종료 후 실행 

JUnit  메인 어노테이션

@SpringBootTest

- 통합 테스트용

- @SpringBootApplication을 찾고, 하위의 모든 Bean을 로드

- Test용 Context를 만들고, 로드한 Bean을 추가 후 MockBean으로 교체

@ExtendWith 

- JUnit4에서 @RunWith로 사용되던 어노테이션

- 메인으로 실행될 Class를 지정

- 위 @SpringBootTest는 기본적으로 @ExtendWith가 추가되어 있음

@WebMvcTest

- 어노테이션에 인자로 전달된 클래스만 로드하여 테스트

- 인자를 지정해주지 않으면 @Controller, @RestController 등 모든 컨트롤러와 연관된 Bean이 로드됨

- 스프링의 모든 Bean을 로드하는 @SpringBootTest 대신 컨트롤러 관현 코드만 테스트할 때 사용

@Autowired

- Controller의 API를 테스트하는 MockMvc 객체를 주입 받음

- perform() 메소드로 컨트롤러의 동작을 확인 가능

- .andExpect(), .andDo(), .andReturn() 과 같은 빌더 형식의 메소드를 같이 활용

@MockBean

- 테스트할 클래스에서 주입 받고 있는 객체에 대해 가짜 객체를 생성

- 해당 객체는 실제 행위는 없음

- given() 메소드를 활용해 가짜 객체의 동작에 대해 정의

@AutoConfigureMockMvc

- Spring.test.mockmvc의 설정을 로드하면서 MockMvc의 의존성을 자동 주입

- MockMvc 클래스는 Rest API 테스트를 할 수 있는 클래스

@Import

- 필요한 Class들을 Configuration으로 만들어 사용

- Configuration Component 클래스도 의존성 설정 가능

- Import된 클래스는 주입으로 사용 가능