다음은 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기반에서 조금은 가볍게 진행이가능하다.
위 어노테이션과 함께 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시켜준다.
일반적으로 Repository,service테스트시 같이 사용되며 @SpringExtenstion, @Transactional,및 Jpa를 테스트하기 위한 여러가지 어노테이션과 함께 작동된다.
테스트가 실행가능하게해준다.
이를 사용하게되면 해당 Bean이 붙은 클래스에 관해서 MockContext에 등록하게 된다. 이는 org.springframework.boot.test.mock.mockito 패키지안에 있으며 @Mock과는 관련없다. 이때 이를 사용하여 등록하는 객체에 관해서는 InjectMocks이 작동하지 않게 된다. 이때 Mock객체 이므로 행동을 정의해 주어야한다.
@Mock은 package org.mockito에 속하는 어노테이션이며 가짜객체를 만들어준다. 이에관해서 해당타입이 맞을시 @InjeckMocks에 등록해준다. 이때 Mock객체 이므로 행동을 정의해 주어야한다.
이또한 package org.mockito에 속하는 어노테이션으로 @Mock이 붙은 클래스를 주입해준다.
이를 사용하게되면 사실상 해당 클래스에 관한 모든기능 및 주입을 받고 행동하게된다. @Autowired와 다를바가 없다.
각 @Test가 실행되기전 행동을 정의해준다.
@Test가 실행되기전 행동을 정의해준다.