首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring Reactive: java.io.IOException:在尝试单元测试返回流量的服务时,连接过早关闭

Spring Reactive: java.io.IOException:在尝试单元测试返回流量的服务时,连接过早关闭
EN

Stack Overflow用户
提问于 2018-04-23 00:05:12
回答 1查看 1.1K关注 0票数 1

在使用spring reactive应用程序时,我创建了一个每秒生成一个事件的rest服务。我的rest控制器的代码是:

代码语言:javascript
复制
@GetMapping(value = "/events", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<Event> getEvents() {
    Flux<Event> eventFlux = Flux.fromStream(Stream.generate(() -> new Event(new Random().nextLong(), "Hello Event")));
    Flux<Long> emmitFlux = Flux.interval(Duration.ofSeconds(1));
    return Flux.zip(eventFlux, emmitFlux).map(Tuple2::getT1);
}

对此进行单元测试的方法如下:

代码语言:javascript
复制
webTestClient.get()
    .uri("/events")
    .accept(MediaType.TEXT_EVENT_STREAM)
    .exchange()
    .expectStatus()
    .isOk();

FluxExchangeResult<Event> result = webTestClient.get().uri("/events").accept(MediaType.TEXT_EVENT_STREAM)
    .exchange()
    .expectStatus()
    .isOk()
    .returnResult(Event.class);

Flux<Event> eventFlux = result.getResponseBody();

StepVerifier.create(eventFlux)        
    .expectSubscription()
    .thenAwait(Duration.ofSeconds(1))
    .expectNextCount(0)
    .thenAwait(Duration.ofSeconds(1))
    .expectNextCount(1)
    .thenAwait(Duration.ofSeconds(1))
    .expectNextCount(2);  

但是当我运行测试时,我得到了这个错误:

代码语言:javascript
复制
java.io.IOException: Connection closed prematurely

有没有人用spring-reactive解决过类似的问题?

EN

回答 1

Stack Overflow用户

发布于 2018-04-27 00:35:15

您必须始终以.verify();结束StepVerifier链,否则它不会订阅它,也不会发生任何事情。

在这种情况下,因为它是无限流,所以在验证之前还必须有一个thenCancel(),否则测试可能会无限期地运行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49967976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档