반응형
728x90
반응형
상황
TEST 데이터를 저장하는 /test/saveTest API 테스트 코드를 작성한다.
@SpringBootTest
@AutoConfigureMockMvc
class SaveControllerTest {
@Test
@DisplayName("TEST 데이터 저장")
void saveTest() throws Exception {
/* param set */
TestDto testDto = new TestDto();
testDto.setName("test");
MvcResult result = mockMvc.perform(post("/test/saveTest")
.contentType(MediaType.APPLICATION_JSON)
.content(toJson(rmVenParamDto)))
.andExpect(status().isOk())
.andReturn();
...
}
}
테스트를 위해 TEST 테이블 데이터를 저장하는 saveTest API를 호출했다. 테스트 완료 후, 해당 데이터는 rollback 되어야한다.
@Transactional 어노테이션 추가
@SpringBootTest
@AutoConfigureMockMvc
class SaveControllerTest {
@Test
@DisplayName("TEST 데이터 저장")
@Transactional // 테스트 완료 후 rollback
void saveTest() throws Exception {
/* param set */
TestDto testDto = new TestDto();
testDto.setName("test");
MvcResult result = mockMvc.perform(post("/test/saveTest")
.contentType(MediaType.APPLICATION_JSON)
.content(toJson(rmVenParamDto)))
.andExpect(status().isOk())
.andReturn();
...
}
}
결과를 확인해보면, Test 코드로 실행되어 저장된 데이터는 존재하지 않는다. 테스트 완료 직후 rollback 되어, 실제로는 저장되지 않았다.
로그를 확인해보면 아래와 같은 메시지가 보인다.
Rolled back transaction for test: [DefaultTestContext@76f7d241 testClass = ...
@Transactional은 테스트 케이스에 선언시 테스트 시작전에 트랜잭션을 시작하고, 테스트 완료 후 항상 롤백을 하여, 다음 테스트에 영향을 주지 않는다.
rollback false 지정
위와 반대로, rollback이 수행되지 않도록 설정할 수 있다.
Class 단위의 @Transactional 어노테이션을 선언했을 경우, 모든 메서드에 대해서 적용된다. 특정 메서드에서만 rollback 처리가 제외되도록 할 경우 사용하면 된다.
@SpringBootTest
@AutoConfigureMockMvc
@Transactional
class SaveControllerTest {
@Test
@DisplayName("TEST 데이터 저장")
@Rollback(false) // rollback 되지 않도록 설정
void saveTest() throws Exception {
/* param set */
TestDto testDto = new TestDto();
testDto.setName("test");
MvcResult result = mockMvc.perform(post("/test/saveTest")
.contentType(MediaType.APPLICATION_JSON)
.content(toJson(rmVenParamDto)))
.andExpect(status().isOk())
.andReturn();
...
}
}
반응형
'Coding > Junit TEST' 카테고리의 다른 글
[Junit TEST 코드] @RequestBody Param 전송 및 Object <-> Json String 변환 (0) | 2022.02.23 |
---|---|
[Junit TEST 코드] 결과 json 에서 결과 String 받아서 테스트 코드 작성하기 (0) | 2022.02.22 |