스프링 클라우드 컨트랙트 공식 레퍼런스를 한글로 번역한 문서입니다.
전체 목차는 여기에 있습니다.
Spring Cloud Contract는 컨텍스트 패스context path를 지원한다.
컨텍스트 패스context path를 사용할 땐 프로듀서producer 쪽만 변경하면 된다. 그리고 explicit 모드로 테스트를 생성해야 한다. 컨슈머consumer 쪽은 그대로 나둬도 된다. 참고로, explicit 모드를 사용해야만 자동 생성 테스트가 통과한다. 테스트를
EXPLICIT
모드로 변경하는 방법은 아래 예제를 참고해라:
Maven Gradle<plugin> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-contract-maven-plugin</artifactId> <version>${spring-cloud-contract.version}</version> <extensions>true</extensions> <configuration> <testMode>EXPLICIT</testMode> </configuration> </plugin>
이렇게 하면 MockMvc를 사용하지 않는 테스트를 생성할 수 있다. 즉, 실제로 요청을 전송한다는 뜻으로, 자동 생성 테스트의 베이스 클래스가 실제 소켓으로 동작하도록 설정해줘야 한다.
아래 명세contract를 예시로 들어보면:
org.springframework.cloud.contract.spec.Contract.make {
request {
method 'GET'
url '/my-context-path/url'
}
response {
status OK()
}
}
다음은 베이스 클래스와 RestAssured를 세팅하는 샘플 코드다:
import io.restassured.RestAssured;
import org.junit.Before;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.server.LocalServerPort;
@SpringBootTest(classes = ContextPathTestingBaseClass.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class ContextPathTestingBaseClass {
@LocalServerPort int port;
@Before
public void setup() {
RestAssured.baseURI = "http://localhost";
RestAssured.port = this.port;
}
}
이렇게 세팅하면:
- 자동 생성된 테스트에서 모든 요청은 컨텍스트 패스context path가 포함된 실제 엔드포인트로 전송한다 (e.g.
/my-context-path/url
). - 명세contract에도 컨텍스트 패스context path를 반영했기 때문에, 스텁stub을 만들 때에도 이 정보를 반영한다 (예를 들어, 스텁stub을 호출할 때도
/my-context-path/url
을 호출해야 한다).
Next :
3.4.6. Working with REST Docs
Spring REST Docs 통합하기
전체 목차는 여기에 있습니다.