728x90
결론
import io.kotest.extensions.spring.SpringTestExtension
import io.kotest.extensions.spring.SpringTestLifecycleMode
import org.springframework.transaction.annotation.Transactional
@SpringBootTest
@AutoConfigureMockMvc
@Transactional
class SomeControllerTest(
private val mockMvc: MockMvc,
private val objectMapper: ObjectMapper,
) : BehaviorSpec({
extensions(SpringTestExtension(SpringTestLifecycleMode.Root))
// ...
)}
@Transactional과 extensions(SpringTestExtension(SpringTestLifecycleMode.Root))를 Root로 설정해 주면 된다.
오류상황
@SpringBootTest
@AutoConfigureMockMvc
class SomeControllerTest(
private val mockMvc: MockMvc,
private val objectMapper: ObjectMapper,
) : BehaviorSpec({
Given("") {
When("") {
Then("") {
이런 구조의 Kotest를 쓰고 있었는데 통합테스트를 하고 있어서 PATCH나 POST로 DB를 업데이트하는 부분이 있었다. 그런데 이제 트랜잭션 롤백이 안 돼서 DB에 업데이트가 적용되는 이슈가 있었다.
- 간단하게 생각해 낸 해결 방안이 @Transactional을 붙이면 되겠다고 생각했다. 그래도 롤백이 안 됐다..
- 찾아보니 extensions(SpringTestExtension(SpringTestLifecycleMode.Root))를 Root나 Test를 하면 된다고 해서 했는데 이래도 안 됐다..
- 그래서 이제 두 개를 같이 써봤는데 롤백이 드디어 됐다..!
- 사실 여기서 SpringTestLifecycleMode.Test랑 @Transactional 이랑 같이 쓰면 또 롤백이 안 되긴 한다..
잘 안 되는 부분이나 오류가 나는 부분이 있으면 댓글로 공유 부탁드려요! 언제나 잘못된 설명이나 부족한 부분에 대한 피드백은 환영입니다🤍
728x90