Если я использую свой поток напрямую с StepVerifier
, то все работает нормально, но если я вызываю publish().autoConnect()
для потока и использую результат с StepVerifier
, то шаг verify()
никогда не завершается.
Например, у меня есть простой поток, такой как этот, который генерирует целые числа от 0 до бесконечности:
Flux<Integer> flux = Flux.fromStream(Stream.iterate(0, i -> i + 1));
Тогда все отлично работает с StepVerifier
, если я просто использую несколько элементов, отмените и проверьте:
StepVerifier.create(flux)
.thenConsumeWhile(i -> i < 10)
.thenCancel()
.verify();
Но если вместо этого я сделаю следующее, то это никогда не закончится:
StepVerifier.create(flux.publish().autoConnect())
.thenConsumeWhile(i -> i < 10)
.thenCancel()
.verify();
Я предполагаю, что здесь происходит что-то довольно очевидное, но я не знаю, что?
Это всплывает, когда я пытаюсь использовать StepVerifier
в тесте с API, который выглядит примерно так:
class MyApi {
private Flux<Integer> underlyingFlux = ...
Flux<Integer> getFlux() { return underlyingFlux.publish().autoConnect(); }
}
См. Мои примеры github для некоторыхготов для запуска кода, который демонстрирует проблемы, с которыми я сталкивался StepVerifier
.
Обновление: эта проблема была принята командой Reactor как ошибка - см. проблему # 1528 - исправление доступно в версии 3.2.9. ВЫПУСК активной зоны реактора.