Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用StepVerifier验证是否至少经过了一段时间?_Java_Spring_Unit Testing_Project Reactor - Fatal编程技术网

Java 使用StepVerifier验证是否至少经过了一段时间?

Java 使用StepVerifier验证是否至少经过了一段时间?,java,spring,unit-testing,project-reactor,Java,Spring,Unit Testing,Project Reactor,我正在使用project和来测试我的函数,myFunc,它返回一个Flux: Flux results=myFunc() 步骤验证程序。创建(结果)。。 内部myFunc正在使用from,我想验证在使用StepVerifier完成流之前必须至少经过一段时间 如何使用步进验证器 更新1: 请注意,myFunc()实际调用本地运行的(假的)http服务器以进行测试。所以我认为设置虚拟时间是不可能的 更新2: 例如,假设myFunc()发出30个请求,速率限制配置为10 rpm,因此我预计订阅将持续

我正在使用project和来测试我的函数,
myFunc
,它返回一个
Flux

Flux results=myFunc()
步骤验证程序。创建(结果)。。
内部
myFunc
正在使用from,我想验证在使用
StepVerifier
完成流之前必须至少经过一段时间

如何使用
步进验证器

更新1:

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

更新2:


例如,假设
myFunc()
发出30个请求,速率限制配置为10 rpm,因此我预计订阅将持续3秒多一点。也就是说,我想确认已经发出了30个请求(
expectNextCount(30)
),并且一定时间(3秒)已经过去。

对我来说,听起来等待(Duration timeshift)方法就是你要找的

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.
StepVerifier.Step然后等待(持续时间时间移位)
在给定的持续时间内暂停期望评估。如果已配置VirtualTimeScheduler,则将使用VirtualTimeScheduler.advanceTimeBy(持续时间),暂停不会阻止测试或发布线程。

您要查找的是
expectNoEvent(持续时间)
。请注意,订阅是一个(几乎)总是发生的事件,因此对于空序列,您应该有如下内容:

StepVerifier.create(result)
    .expectSubscription()
    .expectNoEvent(Duration.ofMillis(100))
    .verifyComplete();
verify()
返回标记验证实际持续时间的
Duration
对象。这样你就可以检查总共花了多长时间


然而,它似乎没有考虑到虚拟时间的
-它仍然会返回验证的实际持续时间,而不是虚拟时间,这使得它没有那么有用。

谢谢你的建议,但它似乎不起作用。如果我尝试
StepVerifier.create(results.),然后等待(Duration.ofMillis(10)).verifyComplete()
,那么即使需要几秒钟才能完成,它也不会失败。我明白了。很抱歉,我没有选择测试它。然而,我不知道这是否是故意的,但如果不是,你已经指定了10毫秒,也就是1/100秒。我不确定它是否在等待更多,这可能意味着它仍然是一段逝去的时间。如果你想要秒,它应该是持续时间秒(numberofseconds)。我只是想演示一个我预期测试失败的例子(因为它预计需要超过一秒),但它没有。我明白了。谢谢你的澄清!我会进一步调查的!似乎我错过了一个重要的部分:有一个名为
withVirtualTime
的方法。应该在使用
thenAwait()
之前添加它。您尝试过吗?这不起作用,因为我确实需要数据。例如,如果我发出30个速率限制设置为10 rpm的请求,那么我预计订阅将持续3秒多一点。这就是我想核实的。我将更新问题以反映这一点。