API 에 대한 테스트를 하기 위해서는 실제로 서버가 구동되어야 하므로 빠르게 하기 어렵다. 그래서 API 에 대한 기능테스트를 하기 위해 스프링에서 제공하는 기능이 있다. 스프링 컨테이너를 호출하여 테스트 하기 위한 @SpringBootTest
에 설정값을 추가하여 할 수 있다.
backend/src/test/java/com/woowacourse/momo/acceptance/AcceptanceTest.java
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class AcceptanceTest {
@Value("${local.server.port}")
private int port;
@BeforeEach
public void init() {
RestAssured.port = port;
}
}
https://github.com/woowacourse-teams/2022-momo/blob/main/backend/src/test/java/com/woowacourse/momo/acceptance/AcceptanceTest.java
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
로 설정해두면 된다. 스프링에 대한 테스트를 구동하려는데, 스프링에서 제공하는 내장 톰캣을 이용하여 API 에 대한 테스트를 하겠다는 의미이다. 속성값으로 추가한 값은 스프링 부트 테스트를 진행할 때 랜덤 포트를 이용해서 하겠다는 의미이다.
@Value("${local.server.port}")
는 랜덤 포트로 돌아가는 서버에서 포트 정보를 추출하는 코드이다. port 에는 해당 서비스에서 사용되는 포트 정보가 담겨있다. RestAssured 에 포트 정보를 담았다.
backend/src/test/java/com/woowacourse/momo/acceptance/RestHandler.java
package com.woowacourse.momo.acceptance;
import org.springframework.http.MediaType;
import io.restassured.RestAssured;
import io.restassured.response.ValidatableResponse;
public class RestHandler {
public static ValidatableResponse getRequest(String path) {
return RestAssured.given().log().all()
.contentType(MediaType.APPLICATION_JSON_VALUE)
.when()
.get(path)
.then().log().all();
}
...
}
https://github.com/woowacourse-teams/2022-momo/blob/main/backend/src/test/java/com/woowacourse/momo/acceptance/RestHandler.java
RestAssured 는 위의 코드처럼 사용할 수 있다.
최종적으로 스프링의 내장 톰캣을 이용해 작동하는 서버는 localhost:{port}/{url}
의 형식으로 동작한다.