티스토리 뷰
728x90
반응형
WireMock
WireMock은 가짜 HTTP 서버를 만들어서 실제 서비스와 상호 작용하는 것을 시뮬레이션하고,
테스트 중에 실제 서비스 대신 가짜 서비스를 사용하여 통합 테스트를 수행하는 데 사용
build.gradle
dependencies {
testImplementation("org.springframework.cloud:spring-cloud-contract-wiremock")
}
@AutoConfigureWireMock
WireMock을 Spring Boot 애플리케이션의 통합 테스트에서 자동으로 구성하는 데 사용되는 어노테이션
이 어노테이션을 사용하면 WireMock 서버가 자동으로 시작되고 종료되며, 설정된 Mock API를 사용하여 테스트를 수행
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
@AutoConfigureWireMock(port = 0) // WireMock 서버를 자동으로 설정하고 포트는 랜덤
@TestPropertySource(properties = { //동적으로 프로퍼티 설정 변경
"api.url=http://localhost:${wiremock.server.port}" //wiremock stub서버에서 사용된 포트
})
public class MyWireMockTest {
@Autowired
private MyRestClient restClient;
@Test
public void testMyRestClient() {
// WireMock 서버에 대한 Mock API 응답 설정
WireMock.stubFor(WireMock.get(WireMock.urlEqualTo("/api/resource"))
.willReturn(WireMock.aResponse()
.withStatus(HttpStatus.OK.value())
.withHeader("Content-Type", MediaType.APPLICATION_JSON_VALUE)
.withBody("{\"message\": \"Hello, World!\"}")));
// RestClient를 사용하여 WireMock 서버에 요청을 보냄
String response = restClient.getResource();
// 테스트 로직 작성
// 예상 결과를 확인하는 코드 추가
}
@Test
public void testMyRestClientTimeoutTest() {
WireMock.stubFor(WireMock.get(WireMock.urlEqualTo("/api/resource"))
.willReturn(WireMock.aResponse()
.withStatus(HttpStatus.OK.value())
.withFixedDelay(6000))); //6초 지연 발생
assertThatThrownBy(() -> restClient.searchTest(search)).isInstanceOf(RetryableException.class).hasMessageContaining("Read timed out");
}
}
JSON stub 파일
요청, 응답 stub 설정을 JSON 파일로 설정 가능
기본 경로는 src/test/resources/mappings 경로의 json 파일
@AutoConfigureWireMock(stubs="classpath:/stubs") 으로 경로 변경 가능
WiremockConfiguration BeanCreationException 이슈
- Spring Cloud 버전 2021.0.2 이상으로 업그레이드 필요
- https://velog.io/@csh0034/M1-Wiremock-no-conscryptopenjdkjni-osx-aarch64-in-java.library.path
https://github.com/wiremock/wiremock
728x90
반응형
'Spring' 카테고리의 다른 글
[Spring Boot] CircuitBreaker Resilience4j (0) | 2023.10.07 |
---|---|
[Spring Boot] OpenFeign Fallback (0) | 2023.10.03 |
[Spring Boot] OpenFeign 로깅 설정 (0) | 2023.10.01 |
[Spring Boot] OpenFeign (0) | 2023.09.28 |
[Spring] @SpringBootTest 통합테스트 (0) | 2023.08.27 |
반응형
300x250