배경
@Transactional
을 붙여놓은 테스트에서XXXRepository
로 저장한 데이터들이Awaitility
사용시에만 조회되지 않는 이슈가 있었다.
Awaitility.await().pollInterval(100, TimeUnit.MILLISECONDS).until({
XXXRepository.listByIds(ids)
}) { it.size == 5 }
원인
- Awaitility는 기본적으로 별도의 스레드로 동작하기 때문에 위와 같은 예시에서는 같은 트랜잭션으로 묶이지 않는다.
- 테스트와 같은 스레드에서 동작하기를 원한다면
pollInSameThread()
를 사용해야 된다.
Awaitility.with().pollInSameThread().await().atMost(1000, TimeUnit.MILLISECONDS).until {
XXXRepository.listByIds(ids).size == 5
}