스프링 클라우드 컨트랙트 공식 레퍼런스를 한글로 번역한 문서입니다.
전체 목차는 여기에 있습니다.
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 통합하기
전체 목차는 여기에 있습니다.