각 컨트롤러마다 통합 테스트를 작성하는데 설정파일의 변동은 거의 없어서 테스트의 설정을 모아두는 클래스를 만들기로 했습니다.
@SpringBootTest
@AutoConfigureMockMvc
@ActiveProfiles("test")
@Import({DataInitializer.class,TestRepository.class})
@Transactional
public class BaseIntegrationTest {
protected final ObjectMapper mapper = new ObjectMapper();
@Autowired
protected MockMvc mockMvc;
@Autowired
protected TestRepository testRepository;
}
기본 통합 테스트의 설정입니다.
- SpringBootTest : spring context위에서 테스트를 진행할거기 때문에 작성해줍니다.
- AutoConfigureMockMvc : 통합테스트는 mockMvc.perform 메서드를 사용하여 진행합니다. 이에 필요한 설정들을 자동으로 셋팅해주는 어노테이션입니다.
- ActiveProfile : test용 설정파일을 적용시키기 위한 어노테이션입니다. test용 설정파일이 없거나 해당 어노테이션이 없으면 main의 설정 파일을 가져다가 사용하게됩니다.
- Import : 추가로 작성한 파일들을 사용하기 위해 사용됩니다. 저는 main의 repo들을 쉽게 접근하기 위한 TestRepository와 초기 데이터 설정을 위한 DataInitalizer을 import했습니다.
class UserControllerTest extends BaseIntegrationTest {
private final String END_POINT = "/api/users";
@Test
@DisplayName("내 정보 조회")
@WithMockCustomUser
void readMyInfo() throws Exception {
mockMvc.perform(get(END_POINT))
.andExpect(status().isOk())
.andDo(print());
}
}
다음과 같이 작성한 설정 파일을 extends하여 사용하시면 됩니다. mockMvc, testRepository를 protected로 선언하여 바로 사용하실 수 있습니다.