-
Notifications
You must be signed in to change notification settings - Fork 0
06. How to test Request(N)
이진혁 edited this page May 25, 2021
·
1 revision
Backpressure에서 Subscriber가 Publisher에게 데이터를 요청할 때
가지고 있는 Subscription에 request(N) 메소드를 이용하여 요청합니다.
이렇게 받고자 하는 데이터의 개수를 조절할 수 있는데
이를 StepVerifier를 이용해 테스트할 때도 사용할 수가 있습니다.
Flux<String> flux = Flux.just("apple", "banana", "grape", "melon", "mango");
StepVerifier.create(flux, 1)
.expectNext("apple")
.thenRequest(1)
.expectNext("banana")
.thenRequest(2)
.expectNext("grape", "melon")
.thenRequest(1)
.expectNext("mango")
.verifyComplete();StepVerifier.create() 메소드를 사용하여 StepVerifier 객체를 만들 때,
첫 매개변수인 Publisher 객체 이후에 몇 개의 request를 가져올 것인지 정할 수 있습니다.
여기서 1을 매개변수로 넘기면 Flux 중에 'apple' 데이터만 넘어오게 되고
expectNext() 메소드를 이용하여 'apple' 데이터가 넘어올 것이라는 것을 검증할 수 있습니다.
이후에 데이터를 더 요청하려면 thenRequest() 메소드를 사용할 수 있습니다.
매개변수로 넘긴 수만큼 Publisher로부터 데이터를 받아오며
모두 가져왔을 경우 complete 또는 error 시그널을 보냅니다.
이렇게 모든 데이터를 가져올 때까지 즉, complete 또는 error 시그널을 받을 때까지
request(N)를 호출하게 되면 데이터 스트림이 무한정으로 길때
쓸데없이 모든 데이터를 검증해야 하는 문제가 발생합니다.
이런 문제를 해결하기 위해서 thenCancel() 메소드를 사용할 수 있습니다.
Flux<String> flux = Flux.just("apple", "banana", "grape", "melon", "mango");
StepVerifier.create(flux, 1)
.expectNext("apple")
.thenCancel()
.verify();이렇게 첫 번째로 들어오는 'apple' 데이터만 검증한 뒤 캔슬 후 검증을 마치는 것을 볼 수 있습니다.