2017-11-02 41 views
0

여기 내 코드입니다. 내가 원하는 것은 3 가지 예외를 테스트하는 것입니다. 그러나 지역 변수 restTemplate을 조롱하는 방법을 모르겠습니다.스프링 부트에서 로컬 RestTemplate을 모의 연결하여 연결을 거부하는 방법은 무엇입니까?

내 코드 :

private void setJobInstanceInfo(JobInstance jobInstance, String uri, String group, String jobName) { 
     RestTemplate restTemplate = new RestTemplate(); 
     TypeReference<HashMap<String, Object>> type = new TypeReference<HashMap<String, Object>>() { 
     }; 
     try { 
      String resultStr = restTemplate.getForObject(uri, String.class); 
      HashMap<String, Object> resultMap = JsonUtil.toEntity(resultStr, type); 
      setJobInstanceIdAndUri(jobInstance, resultMap); 
     } catch (RestClientException e) { 
      LOGGER.error("spark session {} has overdue, set state as unknown!\n {}", jobInstance.getSessionId(), e.getMessage()); 
      setJobInstanceUnknownStatus(jobInstance); 
     } catch (IOException e) { 
      LOGGER.error("jobInstance jsonStr convert to map failed. {}", e.getMessage()); 
     } catch (IllegalArgumentException e) { 
      LOGGER.warn("Livy status is illegal. {}", group, jobName, e.getMessage()); 
     } 
    } 

전화 restTemplate.getForObject(uri, String.class)은 항상 다음과 같이 예외가 발생하는 경우 :

"I/O error on GET request for url: Connection refused: connect".

를 나는 내가 조롱하고 난 아무것도 반환 할 무엇 problem.That URL을 알고 배고 있다. 그래서 RestClientException 및 IOException과 IllegalArgumentException에 대한이 세 가지 예외를 테스트하는 메소드를 제공 할 수 있습니까?

+0

모든 이유는 아니다 나머지 템플릿을 클래스 변수를 만들고 생성자에서 한 번 인스턴스 나 :

@Bean public RestTemplate restTemplate(RestTemplateBuilder builder) { return builder.build(); } 

이 그럼 당신은 여기에 설명처럼 나머지 클라이언트 테스트를 쓰기 시작할 수있는 봄 구성이 추가 의존성으로 주입하는 것 조차요? – dev4Fun

답변

0

처음에는 메서드에서 RestTemplate을 인스턴스화하지 마십시오! Spring이 당신을 위해 그것을 만들어 보자.

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-testing.html#boot-features-testing-spring-boot-applications-testing-autoconfigured-rest-client

+0

답장을 보내 주셔서 감사합니다.하지만 우리는 이미 내 방법으로 RestTemplate을 인스턴스화했으며 많은 비슷한 장소가 있습니다. 다른 방법이 있습니까? – flynn

+0

메소드 당 하나의 나머지 템플릿이 필요하고 모의하고 싶다면 또 다른 옵션은 메서드의 외부에서 매개 변수로 제공하는 것입니다. 그러면이 나머지 템플릿을 어딘가에 구성 할 수 있어야하므로 모의 할 수 있습니다 . – mrkernelpanic