我正试图按照以下教程中解释的方式测试我的SSE API。https:/docs.spring.iospringdocscurrentspring-framework-referencetesting.html#webtestclient-stream。 .
不幸的是,它对我不起作用。为了生成下一个事件,有必要执行一些动作来触发它。我不能在等待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();
我有类似的问题。如果我理解正确的话,你想发布某种消息,然后检查是否收到该消息。如果是这样的话,那么你应该使用订阅和提供消费者。下面是一个例子。
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) {
}
});