@Test
@Transactional
public void findTest(){
//Given
String url="http:localhost:"+port+"/search/cocktail/?inputStr";
//when
ResponseEntity<BaseResponse> responseEntity=testRestTemplate.exchange(url, HttpMethod.GET, null, BaseResponse.class);
//then
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(responseEntity.getBody().getIsSuccess()).isTrue();
assertThat(responseEntity.getBody().getMessage()).isEqualTo("요청에 성공하였습니다.");
}
위와 코드는 Controller
로 요청을 보내면, 내가 보낸 요청이 응답받는데 성공하는지 테스트하고, 응답 코드가 내가 구현한 것과 일치하는지 테스트하는 테스트 코드이다. 하지만 글 맨 아래에 첨부한 오류가 발생했다. 원인을 파악하고 해결책을 찾고자 protocol = http host = null
을 검색했는데 StackOverflow
에 원인과 해결책이 바로 나왔다.
String url
에서 "http:"
가 아니라 http://
로 해야 오류가 발생하지 않는다.@Test
@Transactional
public void findTest(){
//Given
String url="http://localhost:"+port+"/search/cocktail/?inputStr";
//when
ResponseEntity<BaseResponse> responseEntity=testRestTemplate.exchange(url, HttpMethod.GET, null, BaseResponse.class);
//then
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(responseEntity.getBody().getIsSuccess()).isTrue();
assertThat(responseEntity.getBody().getMessage()).isEqualTo("요청에 성공하였습니다.");
}
코드를 위와 같이 수정하고 나니까 오류가 해결됐다.
"http:"
가 아니라 http://
로 해야 하는 이유를 더 자세히 찾아봤다. URL을 비교할 때 내가 요청을 보낸 String url
과 Controller
의 URL을 equals()
로 비교한다. Controller
의 URL은 http://~~~
이기 때문에 요청을 보낼 때"http:"
가 아니라 http://
로 정확히 해야 한다.
protocol = http host = null
java.lang.IllegalArgumentException: protocol = http host = null