해당 클래스가 속한 패키지를 탐색해서 @SpringBootApplication
어노테이션이 붙은 클래스를 탐색하고 실행시킵니다. 만약 없다면 한 패키지씩 줄여가면서 탐색을 이어나갑니다. 해당 애플리케이션을 실행 시켜주므로 모든 컴포넌트(Bean)들도 실행됩니다.
인-메모리 데이터베이스를 사용해서 모델들을 생성해줍니다.
기존의 Mock Testing은 내장 톰켓 서버를 구동하지 않은체로 테스트를 진행했지만 @SpringBootTest
를 사용하게 되면 실제 가용한 포트로 내장톰캣을 띄우고 응답을 받아서 테스트를 수행하게 됩니다.
이때 MockMvc
대신 TestRestTemplate
을 사용하게 됩니다.
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class ItemControllerIT {
@Autowired
private TestRestTemplate testRestTemplate;
@Test
public void contextLoads() throws JSONException {
String response = this.testRestTemplate.getForObject("/items", String.class);
JSONAssert.assertEquals("[{id:10001},{id:10002},{id:10003},{id:10004}]", response, false);
}
}
webEnvironment = StringBootTest.WebEnvironment.RANDOM_PORT
testRestTemplate.getForObject(url, return type)
만약 의존성이 있는 특정 컴포넌트(예: Service, Repository)를 Mocking 하고 싶다면(테스트가 너무 커질수 있으므로)
@MockBean
어노테이션을 사용해서 Mock Object를 생성해주면 됩니다.