반응형
- RestClientTest 어노테이션은 외부 API를 사용할 때 대상 API를 MOCKING 할 수 있는 유용한 테스트이다.
- 요청을 받는 쪽이 아닌 요청을 하는 쪽 입장에서의 테스트이다.
- @RestClientTest를 사용하면 MockRestServiceServer라는 임시 서버를 Bean으로 생성해준다.
- @SpringBootTest와 달리 지정한 최소한의 Context만 사용해서 테스트를 진행한다.
- 아래는 기존 Service 코드이다.
@Service
public class RestClientTestService {
private final RestTemplate restTemplate;
private final String openApiUrl = "https://httpbin.org/get";
public RestClientTestService(RestTemplateBuilder restTemplateBuilder){
this.restTemplate = restTemplateBuilder.build();
}
public Rest getApi() {
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(openApiUrl)
.queryParam("a", "a");
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.set(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE);
httpHeaders.set(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
HttpEntity<?> httpEntity = new HttpEntity<>(httpHeaders);
return restTemplate.exchange(builder.toUriString(), HttpMethod.GET, httpEntity, Rest.class).getBody();
}
}
- 위 서비스 코드에 대한 RestClientTest를 작성해보면 아래와 같이 작성할 수 있다.
@RunWith(SpringRunner.class)
@RestClientTest(value = RestClientTestService.class)
public class RestClientTestServiceTest {
@Autowired
RestClientTestService restClientTestService;
@Autowired
private MockRestServiceServer mockServer;
private final String openApiUrl = "https://httpbin.org/get";
@Test
public void getApi(){
// given
Rest rest = new Rest();
Args args = new Args();
args.setA("a");
rest.setArgs(args);
String expect = "{\"args\":{\"a\":\"a\"},\"headers\":{\"Accept\":\"application/json\",\"Content-Type\":\"application/json\",\"Host\":\"httpbin.org\",\"User-Agent\":\"Java/11.0.7\",\"X-Amzn-Trace-Id\":\"Root=1-605defad-35b5c60e6d4e616220bfffb0\"},\"origin\":\"14.47.104.108\",\"url\":\"https://httpbin.org/get?a=a\"}";
mockServer.expect(requestTo(openApiUrl + "?a=a"))
.andRespond(withSuccess(expect, MediaType.APPLICATION_JSON));
// when
Rest api = restClientTestService.getApi();
// then
assertThat(api.getArgs().getA()).isEqualTo(rest.getArgs().getA());
}
}
참고 사이트
반응형
'IT > TDD & Test' 카테고리의 다른 글
[JUnit] 파일 & 리소스 (/src/test/resources) 가져오기 (0) | 2022.08.01 |
---|---|
[JUnit] Dynamic Tests (0) | 2022.07.30 |
[JUnit] 객체 타입 체크 (0) | 2022.07.26 |
[JUnit] JUnit에서 현재 실행 중인 테스트 이름 가지고 오기 (0) | 2022.07.25 |
Controller Test를 해보자~! (0) | 2021.03.21 |