2016-10-18 6 views
1

TestSubscriber과 같은 것이 있습니다. 그것은 awaitTerminalEvent(), getOnNextEvents() 같은 매우 유용한 기능을 가지고있다 등RxJava 테스트 관찰 가능

시퀀스의 중간에 일부 관측에 고정 될 수 Observable에 대한 TestSubscriber의 동등한이 있습니까?

나는 그 중 하나, 몇 가지 구체적인 사례를 테스트 할 것입니다 : 내가 생성자에서 Observable을 허용하는 클래스가

  • . 그 중 하나는 onErrorResumeNext 연산자 안에 Observable을 호출하는 메소드입니다. 따라서 특정 조건에서 주 Observable을 실행하면 테스트 된 Observable이 호출 될 수 있습니다. assertExecuted과 같은 것이 필요합니다.

  • 위의 경우에 Thread을 테스트하고 싶습니다. Observable이 실행됩니다.

  • 알고 싶습니다. 입력 한 내용에 따라 Observable이 반환됩니다.

이러한 경우 각각 같은 해결 방법이 필요합니다

observable 
    .doOnNext(o -> { 
     // Observable was given a value 
    }); 

더 좋은 방법은 이미 존재하지 않는 경우, 어떻게 청소기 위의 호출을 할 수 있습니까?

답변

1

어썰트는 람다 자체가 실행되지 않을 수도 있기 때문에 (예 : onErrorResumeNext 경우) 관찰 가능 부분에 속하는 람다 외부에서 테스트해야합니다. 따라서 우리가 테스트하고자하는 결과를 전달하기 위해서는 관찰 가능 외부에 정의 된 객체가 필요합니다.

AtomicBoolean executed = new AtomicBoolean(false); 
Observable 
    .empty() 
    .doOnNext(t -> executed.set(true)) 
    .subscribe(); 
assertFalse(executed.get()); 

이 예는 더 나은 TestSubscriber와 함께 할 수 있지만,이 기술을 보여줍니다

테스트 관찰 가능한의 일반적인 기술은 이벤트를 기록 원자 객체를 사용하는 것입니다. `Atomic` 객체를 지적

AtomicBoolean executed = new AtomicBoolean(false); 
Observable 
    .empty() 
    .doOnNext(Actions.setToTrue(executed)) 
    .subscribe(); 
assertFalse(executed.get()); 
+0

감사 :

rxjava-extras는 자바 6 (지옥 단지 retrolambda 사용)이 사용 사례에 대한 익명 클래스를 작성할 필요하지 않도록 사용하는 경우 편리한 클래스를 가지고 java.util.concurrent' 패키지로부터. 그래서 내가 undestood, 테스트 관찰 할 수 있어야합니다 포장 및 연산자를 추가해야합니다, 만약 내가 제대로 테스트를 실행해야합니다. 당신의 응답을 주셔서 감사합니다. –

관련 문제