티스토리 뷰
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
링크
TAG
- Widget
- Configuration
- gvim
- unit test
- 자바
- 빔
- 커피스크립트
- dojo
- VIM
- 스프링인액션
- REACTOR
- tipoftheday
- intellij
- Git
- 윈도우즈
- 리액터
- Coffeescript
- Eclipse
- 자바스크립트
- VI
- React
- reactiveprogramming
- Windows
- JavaScript
- 리액티브프로그래밍
- Commonjs
- Node.js
- Java
- maven
- console
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함