使用步骤验证程序验证是否至少经过了一段时间



我正在使用反应堆测试项目和StepVerifier来测试我的函数,myFunc,它返回一个Flux<Result>

Flux<Result> results = myFunc()
StepVerifier.create(results). ..

在内部,myFunc正在使用 resilience4j 的速率限制器,我想验证在使用 StepVerifier 完成流之前至少必须经过一段时间。

我如何使用StepVerifier执行此操作?

更新 1:

请注意,myFunc()对本地运行的(假(http 服务器进行实际调用以进行测试。所以我认为设置虚拟时间是不可能的。

更新 2:

例如,假设myFunc()发出 30 个请求,速率限制配置为 10 rps,因此我希望订阅持续 3 秒多一点。 即我想验证是否发出了 30 个请求(expectNextCount(30)(,并且一定时间(3 秒(必须经过。

对我来说

,听起来 thenAwait(持续时间时移(方法就是您正在寻找的。

StepVerifier.Step<T> thenAwait(Duration timeshift)
Pause the expectation evaluation for a given Duration. If a VirtualTimeScheduler has been configured, VirtualTimeScheduler.advanceTimeBy(Duration) will be used and the pause will not block testing or Publisher thread.

您要查找的是expectNoEvent(Duration)。请注意,订阅是一个(几乎(总是发生的事件,因此对于空序列,您应该具有类似以下内容的内容:

StepVerifier.create(result)
    .expectSubscription()
    .expectNoEvent(Duration.ofMillis(100))
    .verifyComplete();

verify()返回一个标记验证实际持续时间的Duration对象。这样您就可以检查总共花费了多长时间。

但是,它似乎没有考虑withVirtualTime - 它仍然会返回验证的实际持续时间,而不是虚拟时间,这使得它的用处要小得多。

最新更新