Spring Junit5 Test정리

Developer:Bird·2021년 2월 1일
4

테스트주도개발

목록 보기
2/2

[주요 어노테이션 및 메서드정리]

1. @ExtendWith(~.class)

다음은 Junit5의 라이프사이클에 Test에서 사용할 기능을 확장할때 사용된다.
이때 옵션으로 @ExtendWith (SpringExtension.class)와 @ExtendWith (MockitoExtension.class)이 많이쓰인다.
두 클래스는 다음의 인터페이스를 구현하고 있다.

1.SpringExtenstion.class:
BeforeAllCallback, AfterAllCallback, TestInstancePostProcessor, BeforeEachCallback, AfterEachCallback, BeforeTestExecutionCallback, AfterTestExecutionCallback, ParameterResolver

2. MockitoExtension.class:
BeforeEachCallback, AfterEachCallback, ParameterResolver

SpringExtension을 이용하게되면 Spring TestContext Framework와 Junit5와 통합하여 사용하게 되고, MockitoExtension을 이용하게되면 Mokito와 관련된 MockContext기반에서 조금은 가볍게 진행이가능하다.

2. @WebMvcTest(~Controller.class)

위 어노테이션과 함께 Controller.class를 지정시 해당 Controller를 테스트 할 수 있다. 이는 클래스를 열어보면 인터페이스는 다음과 같다.

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@BootstrapWith(WebMvcTestContextBootstrapper.class)
@ExtendWith({SpringExtension.class})
@OverrideAutoConfiguration(
    enabled = false
)
@TypeExcludeFilters({WebMvcTypeExcludeFilter.class})
@AutoConfigureCache
@AutoConfigureWebMvc
@AutoConfigureMockMvc
@ImportAutoConfiguration
public @interface WebMvcTest {
    String[] properties() default {};

    @AliasFor("controllers")
    Class<?>[] value() default {};

    @AliasFor("value")
    Class<?>[] controllers() default {};

    boolean useDefaultFilters() default true;

    Filter[] includeFilters() default {};

    Filter[] excludeFilters() default {};

    @AliasFor(
        annotation = ImportAutoConfiguration.class,
        attribute = "exclude"
    )
    Class<?>[] excludeAutoConfiguration() default {};
}

이를 사용하게 되면 SPringExtension 클래스와 함께 WebMvcTest관련 Context도 함께 부트스트랩하게 된다. 또한 Cache,WebMvc,MockMvc등이 자동으로 Configure시켜준다.

3. @DataJpaTest

일반적으로 Repository,service테스트시 같이 사용되며 @SpringExtenstion, @Transactional,및 Jpa를 테스트하기 위한 여러가지 어노테이션과 함께 작동된다.

4. @Test

테스트가 실행가능하게해준다.

5. @MockBean

이를 사용하게되면 해당 Bean이 붙은 클래스에 관해서 MockContext에 등록하게 된다. 이는 org.springframework.boot.test.mock.mockito 패키지안에 있으며 @Mock과는 관련없다. 이때 이를 사용하여 등록하는 객체에 관해서는 InjectMocks이 작동하지 않게 된다. 이때 Mock객체 이므로 행동을 정의해 주어야한다.

6. @Mock

@Mock은 package org.mockito에 속하는 어노테이션이며 가짜객체를 만들어준다. 이에관해서 해당타입이 맞을시 @InjeckMocks에 등록해준다. 이때 Mock객체 이므로 행동을 정의해 주어야한다.

7. @InjectMocks

이또한 package org.mockito에 속하는 어노테이션으로 @Mock이 붙은 클래스를 주입해준다.

8. @SpyBean

이를 사용하게되면 사실상 해당 클래스에 관한 모든기능 및 주입을 받고 행동하게된다. @Autowired와 다를바가 없다.

9. @BeforeEach

각 @Test가 실행되기전 행동을 정의해준다.

10. @BeforeAll

@Test가 실행되기전 행동을 정의해준다.

profile
끈임없이 발전하자.

0개의 댓글