2017-12-22 19 views
0

RxJava를 처음 사용했습니다. 나는 restTemplate을 사용하여 나머지 API를 호출하는 Observable을 작성했습니다. 서비스 클래스에서 만든 Observables의 유닛 테스트를하고 싶습니다. MockMVC를 사용하여 나머지 API 컨트롤러 및 서비스 클래스를 테스트하는 유닛을 알고 있습니다. 따라서 Mockito 또는 MockMVC 또는 사용 가능한 모든 프레임 워크를 사용하여 서비스 클래스의 컨트롤러 및 Observalbes에서 비동기 끝점을 테스트하는 방법에 대한 도움이 필요합니다. 여기 유닛 테스트 RxJava Observables

@Override 
    public Observable<List<Response>> fetchJson() { 
     Observable<List<Response>> list = Observable.<List<Response>>create(
       subscriber -> subscriber.onNext(this.invokeRestCall(APIURL))) 
       .subscribeOn(Schedulers.from(executor));*/ 
     return list; 
    } 
private List<Response> invokeRestCall(String APIURL) { 

    Response[] responses = restTemplate.getForObject(APIURL, Response[].class); 
    return Arrays.stream(responses).collect(Collectors.toList()); 
} 

단위 테스트 케이스에 넣어주세요 SampleController.java

@RequestMapping(value = "/", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) 
    public DeferredResult<List<Response>> getresponse() { 
     DeferredResult<List<Response>> response = new DeferredResult<>(); 
      service 
       .fetchJson() 
       .subscribe(result -> response.setResult(result)); 
     return response; 
    } 

Service.java 내 코드

경우 사람의 시간 서비스 클래스에서 Observable뿐만 아니라 비동기 인 컨트롤러 끝점을 테스트하기 위해 작성되었습니다.

답변

0

내가 아는 한 가지 방법은 스케줄러를 삽입하는 것입니다. 테스트 할 때 모든 Scheduler에 Schedulers.trampoline()을 삽입하면 테스트가 동일한 스레드에서 실행됩니다.