@DirtiesContext
어노테이션을 사용하면 된다.스프링 테스트에서 애플리케이션 컨텍스트는 딱 한 개만 만들어지고 모든 테스트에서 공유해서 사용한다. 따라서 애플리케이션 컨텍스트의 구성이나 상태를 테스트 내에서 변경하지 않는 것이 원칙이다. 만약 변경하면 나머지 모든 테스트를 수행하는 동안 변경된 애플리케이션 컨텍스트가 계속 사용될 것이다. 이는 바람직하지 못하다.
이럴때 @DirtiesContext라는 어노테이션을 추가해주면 된다. 이 애노테이션은 스프링의 테스트 컨텍스트 프레임워크에게 해당 클래스의 테스트에서 애플리케이션 컨텍스트의 상태를 변경한다는 것을 알려준다. 테스트 컨텍스트는 이 애노테이션이 붙은 테스트 클래스에는 애플리케이션 컨텍스트 공유를 허용하지 않는다. 테스트 중에 변경한 컨텍스트가 뒤의 테스트에 영향을 주지 않게 하기 위해서다.
-토비의 스프링中
테스트 스위트 끝난 후 context 재생성
@DirtiesContext
public class TestClass {
}
테스트 스위트 시작 전 context 재생성
@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_CLASS)
public class TestClass {
}
모든 테스트 케이스 끝난 후 context 재생성
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
public class TestClass {
}
모든 테스트 케이스 시작 전 context 재생성
@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)
public class TestClass {
}
특정 테스트 케이스 끝난 후 context 재생성
@DirtiesContext(methodMode = DirtiesContext.MethodMode.AFTER_METHOD)
void test() {
}
특정 테스트 케이스 시작 전 context 재생성
@DirtiesContext(methodMode = DirtiesContext.MethodMode.BEFORE_METHOD)
void test() {
}