Skip to content

[트러블슈팅] 테스트시 @BeforeAll 테스트 간섭 발생

Jae-Hyeon Kim edited this page Jul 9, 2024 · 1 revision

테스트시 @BeforeAll 을 사용했더니 테스트간 간섭이 일어났다.

@Transactional 이 적용되어 있어 롤백이 발생할것이라 생각했지만, 롤백이 발생하지 않고 다른 테스트에서 이전 테스트의 데이터가 보이는 문제였다.

문제 분석

우선 @Transactional 의 동작에 대해 공부해 봤다.

@Trnasactional 은 AoP로 기존 객체를 래핑한 프록시 객체를 생성하게 된다.

그리고 이 프록시 객체에서 @Transactional 이 적용된 메서드를 호출하게 되면 AoP 로직이 먼저 실행되어 트랜잭션을 얻고 비즈니스 로직을 수행한다.

하지만 이 과정은 객체가 프록시형태로 빈으로 등록된 이후에나 가능한 동작이다.

@BeforeAll 의 경우 static method 로써, 이미 빈이 생성되기 전부터 메모리 영역에 존재한다. 그렇기 때문에 프록시 객체와 상관 없이 호출되게 된다.

문제 해결

static 을 사용해야 하는 @BeforeAll 대신에, @BeforeEach 를 사용해 모든 테스트마다 실행할 수 있도록 변경해 주었다.

Clone this wiki locally