Junit5 기준으로 Mockito 와 @BeforeEach, @BeforeAll 등의 CallBack Annotation을 사용할 일이 있다면,
@ExtendWith(MockitoExtension.class) 를 테스트 클래스에 선언해 주도록 하자!
Spring Boot Features
Graceful shutdown is supported with all four embedded web servers (Jetty, Reactor Netty, Tomcat, and Undertow) and with both reactive and Servlet-based web applications. It occurs as part of closing the application context and is performed in the earliest
docs.spring.io
MocktioExtension.class 코드를 까보면, AfterEach, BeforeEach 등 @BeforeEach 등과 같은 콜백 어노테이션에서 인터페이스로 정의된 메소드를 implement 해주는 역할을 한다. 가끔, 테스트 빌드 환경에서, @ExtendWith(MockitoExtension.class) 를 클래스에 선언하지 않고 사용하면, @BeforeEach 콜백 어노테이션의 구현 Class를 로드하지 못해서 계속 실행시도하면서 loop 만 돌다가, Memory Leak 에러가 뜨더라..
아래는 MocktioExtension.class 의 코드 일부인데, ~~EachCallback 함수를 구현해주는 것을 볼 수 있다..
```public class MockitoExtension implements TestInstancePostProcessor, BeforeEachCallback, AfterEachCallback, ParameterResolver {
private static final Namespace MOCKITO = Namespace.create(new Object[]{"org.mockito"});
private static final String SESSION = "session";
private static final String TEST_INSTANCE = "testInstance";
private final Strictness strictness;
public MockitoExtension() {
this(Strictness.STRICT_STUBS);
}
private MockitoExtension(Strictness strictness) {
this.strictness = strictness;
}
public void postProcessTestInstance(Object testInstance, ExtensionContext context) {
context.getStore(MOCKITO).put("testInstance", testInstance);
}
public void beforeEach(ExtensionContext context) {
Set<Object> testInstances = new LinkedHashSet();
testInstances.add(context.getRequiredTestInstance());
this.collectParentTestInstances(context, testInstances);
Strictness actualStrictness = (Strictness)this.retrieveAnnotationFromTestClasses(context).map(MockitoSettings::strictness).orElse(this.strictness);
MockitoSession session = Mockito.mockitoSession().initMocks(testInstances.toArray()).strictness(actualStrictness).startMocking();
context.getStore(MOCKITO).put("session", session);
}```