[JUnit & Mockito] Integration Test using @SpringBootTest

원알렉스·2020년 9월 5일
0

JUnit & Mockito

목록 보기
8/9
post-thumbnail

🚀 Integration Test using @SpringBootTest

해당 클래스가 속한 패키지를 탐색해서 @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)

  • 해당 URI 로 GET 요청을 보냅니다.

만약 의존성이 있는 특정 컴포넌트(예: Service, Repository)를 Mocking 하고 싶다면(테스트가 너무 커질수 있으므로) @MockBean 어노테이션을 사용해서 Mock Object를 생성해주면 됩니다.

profile
Alex's Develog 🤔

0개의 댓글