통합테스트
@Transactional
@Rollback
@RunWith(SpringRunner.class)
@SpringBootTest(classes = ApiApp.class)
@AutoConfigureMockMvc
@ActiveProfiles(TestProfile.TEST)
@Transactional
@Ignore
public class IntegrationTest {
@Autowired protected MockMvc mvc;
@Autowired protected ObjectMapper objectMapper;
...
}
@ActiveProfiles(TestProfile.TEST)
설정으로 테스트에 profile을 지정한다. 환경 별로 properties 파일을 관리하듯이 test도 반드시 별도의 properies 파일로 관리하는 것이 바람직@Transactional
트랜잭션 어노테이션을 추가하면 테스트코드의 데이터베이스 정보가 자동으로 Rollback 된다. 베이스 클래스에 이 속성을 추가 해야지 실수 없이 진행할 수 있다.@Transactional
을 추가하면 자연스럽게 데이터베이스 상태의존적인 테스트를 자연스럽게 하지 않을 수 있게 된다.protected
로 제공해줄 수 있다. API 테스트를 주로 하게 되니 ObjectMapper 등을 제공해줄 수 있다. 유틸성 메서드들도 protected
로 제공해주면 중복 코드 및 테스트 코드의 편의성이 높아진다.@Ignore
어노테이션을 추가한다.public class MemberApiTest extends IntegrationTest {
@SpringBootTest
@Transactional
@Rollback(value = false)
class ThreadRepositoryTest {
@SpringBootTest
, @Transactional
, @Rollback
이 적용된 것을 알 수 있다.@Transactional
과 @Rollback
어노테이션을 사용하는 이유는 테스트 케이스의 특정 동작을 제어하기 위함이다.@Transactional
어노테이션과 함께 사용되는 경우 롤백 여부를 제어한다.@Transactional
이 있을 때는 테스트 메서드가 완료되면 롤백된다. 그러나 @Rollback(false)
로 설정하면 롤백되지 않고 영구적으로 변경된다.