Spring DirtiesContext
스프링 단위 테스트 진행시 단독으로 수행되던 코드들이 통합테스트시에 Context를 공유하여 올바른 값이 도출되지 않는 경우가 있다. 그 이유는 하나의 Spring TEST Context에서 기존의 Context를 재사용함에 따라 발생하는 문제이다. 이러한 문제들을 해결하기 위하여 필요한것들이 @DirtiesContext
이다.
이 @DirtiesContext
어노테이션은 테스트를 수행전, 수행후, 각 테스트 케이스마다 수행하기 전, 수행한 이후에 Context를 재생성하는 역할을 한다.
@DirtiesContext
1 | @DirtiesContext indicates that the underlying Spring ApplicationContext has been dirtied during the execution of a test (that is, the test modified or corrupted it in some manner — for example, by changing the state of a singleton bean) and should be closed. When an application context is marked as dirty, it is removed from the testing framework’s cache and closed. As a consequence, the underlying Spring container is rebuilt for any subsequent test that requires a context with the same configuration metadata. |
doc.spring.io에 따르면 @DirtiesContext ApplicationContext 테스트를 실행하는동안 테스트 프레임워크의 캐시를 제거하고 닫게합니다. 결과적으로 기본 Spring Container에 동일한 구성 메타 데이터가 있는 컨텍스트를 필요로하는 후속 테스트를 위해 재 빌드된다고 나와있습니다.
또한, 클래스 계층 구조내에서 클래스 수준 주석과 메서드 수준 수적으로 모두 사용할 수 있습니다.
클래스 테스트 시작전 Context 재생성
1 |
|
클래스 테스트 이후 Context 재생성
1 |
|
모든 테스트 케이스마다 시작하기 이전 Context 재생성
1 |
|
모든 테스트케이스가 끝날때 마다 Context 재생성
1 |
|
특정 케이스 시작전 Context 재생성
1 |
|
특정 케이스 시작 이후 Context 재생성
1 |
|
Reference
https://shortstories.gitbooks.io/studybook/content/dirtiescontext.html