当前位置: 首页 > 知识库问答 >
问题:

项目Reactor试验从未完成

桓瀚
2023-03-14

我创建了一个简单的Kafka使用者,它返回一个对象流(接收到的消息),我试图使用stepverifier测试它。

在我的测试中,我做了类似的事情:

Flux<Pojo> flux = consumer.start();
StepVerifier.create(flux)
  .expectNextMatches(p -> p.getList().size() == 3)
  .verifyComplete();

断言工作正常(如果将值从3更改为其他值,则测试失败)。但是,如果断言通过,测试永远不会退出。

我还尝试使用verify方法,如下所示:

StepVerifier.create(flux)
  .expectNextMatches(f -> f.getEntitlements().size() == 3)
  .expectComplete()
  .verify(Duration.ofSeconds(3));

在本例中,我得到以下错误:

java.lang.AssertionError: VerifySubscriber timed out on false

你知道我做错了什么吗?

共有1个答案

韦翰音
2023-03-14

Kafkaflux可能是无限的,所以它永远不会发出oncomplete信号,而测试需要等待这个信号。如果只对测试第一个值感兴趣,可以调用.thencancel().verify()

 类似资料:
  • 请忽略这个问题。我有错误的设置,导致gRPC的性能不佳。 是否可以比较GRPC与项目Reactor? 我只是想比较REST和GRPC的性能。我看不出GRPC比Reactor快。事实上,它更糟。 GRPC设置: 此 grpc 服务器使用服务器端流对来自 api 服务器的每个请求响应 1000 个“Hello”。 api 服务器返回

  • 就而言,它们之间的主要区别是什么?从文档中,我了解到是异步操作,而是同步操作。但这对我来说并没有什么意义,B/C单声道是关于并行性的,这一点是不可理解的。有人能用一种更容易理解的方式来重新表述吗? 然后在的文档中声明(https://projectreactor.io/docs/core/release/api/reactor/core/publisher/mono.html#FlatMap-ja

  • 刚刚开始探索reactor项目及其抽象、Mono和Flux,并希望了解与Java8 barebones CompletableFuture的基本区别。 下面是我的一个简单代码: 首先,并不奇怪。通过ForkJoinPool调度函数的执行,“end”行立即打印,程序终止,因为主线程在这里确实很短--正如预期的那样。 但是将主线程阻塞在那里。此外,在函数中打印的线程名是主线程。因此,我看到的是顺序/阻

  • 项目Reactor3.1.5。发布 考虑这一点: 我希望订阅服务器在多个线程中运行,但它只在一个线程中运行: 留档告诉我的期望是正确的(http://projectreactor.io/docs/core/release/reference/#threading)。有人能给我解释一下那里发生了什么吗?

  • 最近,我注意到我的团队在如何在Reactor中编写测试方面遵循了两种方法。第一个方法是借助方法。它看起来是这样的: 第二部分是关于的使用。它看起来是这样的: 以我的拙见,第二种方法看起来更被动。此外,官方文件对此非常清楚: 不过,我还是很好奇,应该鼓励什么样的方式作为Reactor测试的主要途径。是否应该完全放弃方法?若有,是甚么情况? 谢了!

  • 有些方法返回。这是一个典型的模式,分多个层: 假设返回一个(它向数据库写入一些内容,发送一条消息等)。如果我只是用替换它,那么一切都按预期工作,否则就不是这样了。更具体地说,单声道从未完成,它贯穿所有处理,但在结束时错过了终止信号。所以这些东西实际上是写在数据库中的,消息实际上是发送的,等等。 为了证明没有终止是问题所在,这里有一个有效的黑客: null 我不能在应用程序之外用简单的单工作流复制这