์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Codedeploy ์ค๋ฅ
- ๋ค์ค ์ปจํ ์ด๋
- ์๋ฒ ํฐ์ง๋ ๋์ปค ์ฌ์คํ
- docker-compose kafka
- nGrinder
- Kafka
- ์๋ฐ
- docker compose
- JPA
- ํ๋ก๊ทธ๋๋จธ์ค ํฉ์นํ์์๊ธ
- s3 log ์ ์ฅ
- ํ๋ก๊ทธ๋๋จธ์ค ์ปฌ๋ฌ๋ง๋ถ
- aws ์ฟ ํฐ
- ์ ํจ์ค ๋น๋ ์ค๋ฅ
- private subnet ec2 ๋ก์ปฌ ์ ์
- ํ๋ก๊ทธ๋๋จธ์ค
- ์ ํจ์ค ์ค์ผ์ค๋ฌ
- docker
- aws saa ํฉ๊ฒฉ
- s3 ์ด๋ฏธ์ง ๋ค์ด๋ก๋
- ์คํํ๋ ๋ฏธ์ค
- docker ps -a
- AWS Certified Solutions Architect - Associate
- s3 ์ด๋ฏธ์ง ์ ์ฅ
- jvm ๋ฐ๋ฐ๋ฅ๊น์ง ํํค์น๊ธฐ
- Entity
- ํ์ดํผ๋ฐ์ด์
- redis ํ ์คํธ์ฝ๋
- redis ์กฐํ
- prod docker-compose
- Today
- Total
๐๐ข๐๐ โ๐๐๐ ๐๐๐ก๐๐ ๐๐๐๐โง
[Spring] MockWebServer ๋ณธ๋ฌธ
[Spring] MockWebServer
๐คRyusun๐ค 2023. 5. 17. 12:30Mock์ด๋?
- ์ค์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๊ธฐ์ ์๊ฐ, ๋น์ฉ ๋ฑ์ Cost๊ฐ ๋๊ฑฐ๋ ํน์ ๊ฐ์ฒด ์๋ก๊ฐ์ ์์กด์ฑ์ด ๊ฐํด ๊ตฌํํ๊ธฐ ํ๋ค ๊ฒฝ์ฐ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค.
- ํ๋ฒ์ ํ๋์ ๋ฉ์๋๋ฅผ ์คํํ๋ ๋จ์ ํ ์คํธ๊ฐ ๋ค๋ฅธ ๋คํธ์ํฌ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฑ๋ฑ ์ ์ดํ๊ธฐ ์ด๋ ค์ด ๊ฒ๋ค์ ์์กดํ ๋ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ํ ์คํธํ๋ค.
Mock ๊ฐ์ฒด๋ ์ธ์ ํ์ํ๊ฐ?
- ํ ์คํธ ์์ฑ์ ์ํ ํ๊ฒฝ ๊ตฌ์ถ์ด ์ด๋ ค์ด ๊ฒฝ์ฐ
- ํ ์คํธ๊ฐ ํน์ ๊ฒฝ์ฐ๋ ์๊ฐ์ ์์กด์ ์ธ ๊ฒฝ์ฐ
- ํ ์คํธ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ
- ๊ฐ์ธ PC์ ์ฑ๋ฅ์ด๋ ์๋ฒ์ ์ฑ๋ฅ๋ฌธ์ ๋ก ์ค๋ ๊ฑธ๋ฆด์ ์๋ ๊ฒฝ์ฐ ์๊ฐ์ ๋จ์ถํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
MockWebServer
- MockWebServer๋ HTTTP Request๋ฅผ ๋ฐ์์ Response๋ฅผ ๋ฐํํ๋ ๊ฐ๋จํ๊ณ ์์ ๊ฐ์ง ์น์๋ฒ์ด๋ค.
- ์ฐ๋ฆฌ๊ฐ ์์ฑํ๋ ๋ฉ์๋ ์ค์ WebClient, RestTemplete ๋ฑ๊ณผ ๊ฐ์ Client๋ฅผ ์ฌ์ฉํ์ฌ, Http๋ฅผ ํธ์ถํ๋ ๋ฉ์๋์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ ๋ ์ด MockWebServer๋ฅผ ํธ์ถํ๊ฒ ํจ์ผ๋ก์จ ์ฝ๊ฒ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค.
- ์ค์ ๋ก Spring Team๋ MockWebServer๋ฅผ ์ฌ์ฉํ์ฌ ํ ์คํธํ๋ผ๊ณ ๊ถ์ฅํ๋ค๊ณ ํ๋ค.
์ธ๋ถ API๋ฅผ ํ ์คํธ ํ๋ ์ด์
- ์ธ๋ถ api๋ api ์๋ฒ์ ์ํ์ ๋ฐ๋ผ ์ฑ๊ณตํ๊ธฐ๋ ํ๊ณ ์คํจํ๊ธฐ๋ ํ๋ค. ๋ํ ํด๋น ์๋ฒ์ ๋ฐํ ๊ฐ์ ๊ตฌ์กฐ๊ฐ ๋ฐ๋๋ฉด ๊ธฐ์กด์ ์ง๋์ ๋ก์ง๊ณผ ํ ์คํธ ์ฝ๋๊ฐ ๋ฌด์ฉ์ง๋ฌผ์ด๋ค.
- ์ธ๋ถ API๊ฐ ์ ์์ด๊ณ , ์ธ๋ถ API๊ฐ ์ ์๋ํ๋ค๋ ๊ฐ์ ํ์ ๋ก์ง์ ๋จ์ํ ์คํธ ํ๊ธฐ ์ํจ์ด๋ค.
์ค์
build.gradle ์ค์
// mockWebServer
testImplementation('com.squareup.okhttp3:okhttp:4.10.0')
testImplementation('com.squareup.okhttp3:mockwebserver:4.10.0')
Mock Server ์ธ์คํด์คํ
class KakaoAddressSearchServiceRetryTest extends AbstractIntegrationContainerBaseTest {
@Autowired
private KakaoAddressSearchService kakaoAddressSearchService
@SpringBean
private KakaoUriBuilderService kakaoUriBuilderService = Mock()
private MockWebServer mockWebServer
spock๋ฅผ ์ฌ์ฉํ์ฌ ํ ์คํธ๋ฅผ ์งํํ์๋ค.
Mock() ์ฌ์ฉํ์ฌ ์ค์ ๋ก ์นด์นด์ค api๋ฅผ ํธ์ถํด์ ์๋ต๊ฐ์ ๋ฐ๋๊ฒ ์๋๋ผ ๋ก์ปฌํธ์คํธ์ ๋ ์๋ ๋ชจํน ์๋ฒ๋ฅผ ํธ์ถํ์ ํ ์คํธ๋ฅผ ์คํํ๋ค. ๋ํ ์คํ๋ง ์ปจํ ์ด๋๋ด์ ์๋ ํด๋น ์๋น์ค๋ฅผ ๋ชจํนํ๊ธฐ์ํด์ @SpringBean ์ ์ฌ์ฉํ๋ค. spock์์๋ @springBean ์ ์ฌ์ฉํ๋ค.(mockbean์ ์คํ๋ง ์ปจํ ์ด๋๋ด์ bean์ ๋ชจํนํ๋ค.)
def setup() {
mockWebServer = new MockWebServer()
mockWebServer.start()
}
def cleanup() {
mockWebServer.shutdown()
}
def "requestAddressSearch retry success"() {
given:
def metaDto = new MetaDto(1)
def documentDto = DocumentDto.builder()
.addressName(inputAddress)
.build()
def expectedResponse = new KakaoApiResponseDto(metaDto, Arrays.asList(documentDto))
def uri = mockWebServer.url("/").uri() //mockwebserver์์ ์ฌ์ฉํ๊ณ ์๋ uri๋ฅผ ๋ฐํ
when:
mockWebServer.enqueue(new MockResponse().setResponseCode(504))
mockWebServer.enqueue(new MockResponse().setResponseCode(200)
.addHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
.setBody(mapper.writeValueAsString(expectedResponse)))
def kakaoApiResult = kakaoAddressSearchService.requestAddressSearch(inputAddress)
def takeRequest = mockWebServer.takeRequest()
then:
2 * kakaoUriBuilderService.buildUriByAddressSearch(inputAddress) >> uri // mockwebserver uri๋ฐํ
// builduribyaddressSearch ๋ฉ์๋๊ฐ ๋๋ฒ ํธ์ถ๋๊ฒ ๋ง๋์ง 2* ๋ฅผ ํด์ค๋ค
takeRequest.getMethod() == "GET"
kakaoApiResult.getDocumentList().size() == 1
kakaoApiResult.getMetaDto().totalCount == 1
kakaoApiResult.getDocumentList().get(0).getAddressName() == inputAddress
}
ํ
์คํธ ๋ฉ์๋ ์คํ์ ์ setup()๋ฉ์๋ ์คํ๋๊ณ mockwebserver()๋ฅผ ์คํํ๋ฉด ๋์ ์ผ๋ก port๊ฐ ํ ๋น์ด ๋๊ณ url๋ localhost์์ ์คํ์ด ๋๋ค. cleanup()๋ฉ์๋๋ ํ
์คํธ ๋ฉ์๋๊ฐ ๋๋๊ณ ๋๋ฉด ์คํํ๋ฉฐ mockserver๋ฅผ shutdown()ํ๋ค.
mockWebServer.enqueue()๋ฅผ ์ฌ์ฉํ๋ฉด MockWebServer๋ ์ํ๋ ์์๋๋ก ์๋ต์ ๋ฐํํ๊ฒ ๋๋ค.
์ถ์ฒ
'๐ฃ๐ฟ๐ผ๐ด๐ฟ๐ฎ๐บ๐บ๐ถ๐ป๐ด๐ป > ๐๐ฉ๐ซ๐ข๐ง๐ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] Batch (0) | 2023.06.21 |
---|---|
[Spring] RestTemplate (0) | 2023.05.19 |
[Spring] Spring Retry (1) | 2023.05.16 |
[Spring] Spock (0) | 2023.05.15 |
[Spring] Docker (0) | 2023.05.14 |