티스토리 뷰

learning

StepVerifier 사용 방법 (4/12)

눈침침 2021. 3. 9. 00:41

Tech.io의 'Reactive Programming with Reactor 3'을 공부하면서 정리하는 글입니다.


StepVerifier

  • Reactor-test 프로젝트에 속함
  • Publisher 를 구독하면서 예상값과 순서를 검증(Assert)할 수 있음
  • 검증이 실패할 경우, AssertionError 를 발생
  • create메서드로 인스턴스를 생성
  • 반드시 verify() 메서드(=StepVerifier.LastStep)를 호출해야 함
  • 보통 다음과 같은 형태임
    StepVerifier.create(T<Publisher>)
    .{expectations...}
    .verify()
  • expectations 의 종류

연습

// TODO Use StepVerifier to check that the flux parameter emits "foo" and "bar" elements then completes successfully.
void expectFooBarComplete(Flux<String> flux) {
  StepVerifier.create(flux)
          .expectNext("foo")
          .expectNext("bar")
          .verifyComplete();
}
// TODO Use StepVerifier to check that the flux parameter emits "foo" and "bar" elements then a RuntimeException error.
void expectFooBarError(Flux<String> flux) {
  StepVerifier.create(flux)
          .expectNext("foo")
          .expectNext("bar")
          .expectError(RuntimeException.class);
}
// TODO Use StepVerifier to check that the flux parameter emits a User with "swhite"username
// and another one with "jpinkman" then completes successfully.
void expectSkylerJesseComplete(Flux<User> flux) {
  StepVerifier.create(flux)
          .assertNext(u -> assertThat(u.getUsername()).isEqualTo("swhite"))
          .assertNext(u -> assertThat(u.getUsername()).isEqualTo("jpinkman"))
          .verifyComplete();
}
// TODO Expect 10 elements then complete and notice how long the test takes.
void expect10Elements(Flux<Long> flux) {
  StepVerifier.create(flux)
          .expectNextCount(10)
          .verifyComplete();
}
// TODO Expect 3600 elements at intervals of 1 second, and verify quicker than 3600s
// by manipulating virtual time thanks to StepVerifier#withVirtualTime, notice how long the test takes
void expect3600Elements(Supplier<Flux<Long>> supplier) {
  StepVerifier.withVirtualTime(supplier)
          .thenAwait(Duration.ofSeconds(3600)) // 3,600 초가 지났다고 간주함
          .expectNextCount(3600)
          .verifyComplete();
}
  • StepVerifier.withVirtualTime(Supplier<Publisher>) 을 사용하면, 조작할 수 있는 시계가 탑재된 VirtualTimeScheduler 에 의해 코드가 실행됨

또 다른 예

StepVerifier.withVirtualTime(() -> Mono.delay(Duration.ofHours(3)))
            .expectSubscription()
            .expectNoEvent(Duration.ofHours(2)) // 2 시간동안 이벤트가 없고,
            .thenAwait(Duration.ofHours(1))     // 1 시간동안
            .expectNextCount(1)                 // 1 번의 이벤트가 발생 한 뒤
            .expectComplete()                   // 종료됨
            .verify();

관련글

2021.03.02 - [learning] - Reactive Programming 소개 (1/12)

2021.03.02 - [learning] - Flux 인스턴스 생성하기 (2/12)

2021.03.09 - [learning] - Mono 만들기 (3/12)

 

 

(전 아직 못봤습니다만..) 백기선님의 동영상

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함