使用StepVerifier测试Mono.delay

时间:2016-12-27 15:14:25

标签: java project-reactor

我尝试使用Mono.delay测试StepVerifier。 我的代码如下:

Mono[Long] mono = Mono.delay(Duration.ofDays(5));

StepVerifier.withVirtualTime(() -> mono)
    .thenAwait(Duration.ofDays(5))
    .expectNextCount(1)
    .expectComplete()
    .verify();

我正在获得以下stacktrace

expectation "expectNextCount" failed (expected: count = 1; actual: counted = 0; signal: onError(reactor.core.Exceptions$BubblingException:
java.util.concurrent.RejectedExecutionException: Scheduler unavailable))
java.lang.AssertionError: expectation "expectNextCount" failed (expected: count = 1; actual: counted = 0; signal: onError(reactor.core.Exceptions$BubblingException: java.util.concurrent.RejectedExecutionException: Scheduler unavailable))
at reactor.test.DefaultStepVerifierBuilder.failPrefix(DefaultStepVerifierBuilder.java:1679)
at reactor.test.DefaultStepVerifierBuilder.fail(DefaultStepVerifierBuilder.java:1675)
at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.checkCountMismatch(DefaultStepVerifierBuilder.java:886)
at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onSignalCount(DefaultStepVerifierBuilder.java:1112)
at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onExpectation(DefaultStepVerifierBuilder.java:963)
at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onError(DefaultStepVerifierBuilder.java:727)
at reactor.core.publisher.MonoDelay.subscribe(MonoDelay.java:59)
at reactor.test.DefaultStepVerifierBuilder$DefaultStepVerifier.verify(DefaultStepVerifierBuilder.java:532)
at reactor.test.DefaultStepVerifierBuilder$DefaultStepVerifier.verify(DefaultStepVerifierBuilder.java:508)

在跟踪源代码之后,似乎关闭方法Schedulers.setFactory上的执行程序

我想知道我是否在这里遗漏了一些东西。

1 个答案:

答案 0 :(得分:2)

好的,我想我已经深究这个问题了。

StepVerifier需要Supplier,在我的情况下,我为Mono[Long]提供了已创建的现有Mono。 我应该做以下

StepVerifier.withVirtualTime(() -> Mono.delay(Duration.ofDays(5)))
    .thenAwait(Duration.ofDays(5))
    .expectNextCount(1)
    .expectComplete()
    .verify();

这样就不会先创建提供的Mono,也不会关闭执行程序。