컨텍스트 오염 문제 (Context Pollution)

song yuheon·2023년 9월 23일
0

Trouble Shooting

목록 보기
16/57
post-thumbnail

문제 상황



컨텍스트 오염문제(Context Pollution)란?


Spring 테스트 환경에서는 여러 테스트들이 같은 Spring ApplicationContext를 재사용하여 실행된다.
이는 테스트의 실행 속도를 향상시키기 위한 것이다.
그러나 어떤 테스트는 ApplicationContext의 상태나 빈의 상태를 변경할 수 있다.
이런 변경이 다른 테스트에 영향을 주게 되면 예상치 못한 테스트 실패를 초래할 수 있다.
이러한 현상을 "컨텍스트 오염문제" 또는 "Spring 컨텍스트 오염"이라고 부른다.


트러블 슈팅


이 문제를 해결하기 위한 대표적인 방법으로 @DirtiesContext 어노테이션을 사용하는 방법이 있다.
@DirtiesContext 어노테이션은 Spring 테스트 프레임워크에게 해당 테스트 실행 후 ApplicationContext를 "더러워졌다"고 알리는 역할을 한다고 한다.
따라서 해당 어노테이션을 적용한 후의 테스트들은 새로운 ApplicationContext를 사용하게 된다.


1. 클래스 레벨@DirtiesContext 적용

테스트 클래스 전체에 @DirtiesContext를 적용하면 해당 테스트 클래스의 모든 테스트 메소드 실행이 완료된 후 ApplicationContext가 다시 로드된다.

2. 메소드 레벨@DirtiesContext 적용

특정 테스트 메소드에만 @DirtiesContext를 적용하면 그 테스트 메소드 실행이 끝난 후에만 ApplicationContext가 다시 로드된다.

* 적용 코드


이렇게 @DirtiesContext 어노테이션을 활용하여 컨텍스트 오염 문제를 해결할 수 있다.
그러나 이 어노테이션을 너무 남발하게 되면 테스트 실행 속도가 느려질 수 있기 때문에 신중하게 사용해야한다.


profile
backend_Devloper

0개의 댓글