2

我正在尝试按照以下教程https://docs.spring.io/spring/docs/current/spring-framework-reference/testing.html#webtestclient-stream中解释的方式测试我的 SSE API 。

不幸的是,它对我不起作用。要生成下一个事件,有必要执行一些将触发它的操作。在等待 WebTestClient 的响应时我无法做到这一点(我没有找到添加此类处理程序的可能性)。

我通过创建定期触发生成事件的单独线程找到了解决方法,但这并不优雅。有没有更好的方法呢?

TimerTask task = new TimerTask() {
        public void run() {
                while (true) {
                        //code that trigger generating event periodically
                }
        }
};
Timer timer = new Timer("Timer");
long delay = 1000L;
timer.schedule(task, delay);

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

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

StepVerifier.create(eventFlux)
        .expectNext(person)
        .expectNextCount(4)
        .consumeNextWith(p -> ...)
        .thenCancel()
        .verify();
4

1 回答 1

0

我有类似的问题。如果我理解正确,您想发布某种消息,然后检查您是否收到该消息。如果是这种情况,那么您应该使用订阅并提供消费者。这是一个例子。

FluxExchangeResult<MyEvent> result = client.get().uri("/events")
    .accept(TEXT_EVENT_STREAM)
    .exchange()
    .expectStatus().isOk()
    .returnResult(MyEvent.class)
    .getResponseBody()
    .subscribe(new Consumer<MyEvent>() {
        @Override
        public void accept(String event) {
        }
    });
于 2020-04-28T11:21:03.443 回答