java - 使用 WebTestClient 测试服务器发送事件 (SSE)

标签 java spring testing server-sent-events webtestclient

我想知道测试 SSE 的最佳方法是什么?

我想要测试的是我想检查我发送的消息(使用 Kafka)是否与我在 SSE 中收到的消息相同。

我读到可以使用 WebTestClient 来做到这一点,但我不明白的是如何连接到 SSE、发送消息,然后检查我的消息是否正确。

我提供了以下代码:

  public void sseIsRunning() {
    WebTestClient client = WebTestClient.bindToServer()
      .baseUrl("http://localhost:8080")
      .build();

     client.get()
      .uri("/sse/1")
      .accept(TEXT_EVENT_STREAM)
      .exchange()
      .expectStatus().isOk()
      .returnResult(MyEvent.class);

     StepVerifier.create(result.getResponseBody())
      .expectNext(myEvent())
      .thenCancel()
      .verify();
}
  private MyEvent myEvent() {
    MyEvent myEvent = new MyEvent();
    myEvent.setClientId(1);
    return myEvent;
  }
  public void messageIsSent() {
    kafka.sendMessage("myTopic", myEvent());
  }

最佳答案

我的情况是我必须订阅

public void sseIsRunning() {
WebTestClient client = WebTestClient.bindToServer()
  .baseUrl("http://localhost:8080")
  .build();

 client.get()
  .uri("/sse/1")
  .accept(TEXT_EVENT_STREAM)
  .exchange()
  .expectStatus().isOk()
  .returnResult(MyEvent.class)
  .getResponseBody()
  .subscribe(new Consumer<String>() {
    @Override
    public void accept(String event) {
      // response map for MyEvent class
    }
  });

}

关于java - 使用 WebTestClient 测试服务器发送事件 (SSE),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61411328/

相关文章:

java - 如何在输出之前在 JSTL 循环内的对象上调用外部库函数?

java - 从 Spring Boot 应用程序将日志文件存储在 AWS S3 中

java - 如何在Spring中实例化类/Bean并在构造函数中传递参数

java - RestTemplate Java Spring,没有合适的 HttpMessageConverter 和 422 UnprocessableEntity

java - 测试用例(场景)——一种还是多种方法?

java - 在 org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler_Decorated@397740e0 上找不到属性 'compile'

java - 子类无法被保护

java - 为 Spring @Autowired 指定顺序

angularjs - 需要在 Protractor 测试用例中访问我的 angular.service

ruby-on-rails - rails Controller 测试,获取 ActionView::MissingTemplate: 缺少模板