Как протестировать поток потоков, таких как Flux<Поток>

#spring-webflux #project-reactor #reactor

#spring-webflux #проект-реактор #реактор

Вопрос:

У меня есть этот интерфейс:

 interface PageRepository {
  fun findAll(): Flux<Flux<Page>>
}
 

И я хочу протестировать его реализацию, но я получаю:
java.lang.AssertionError: expectation "expectNext(FluxIterable)" failed (expected value: FluxIterable; actual value: UnicastProcessor)

В тесте, который я использую expectNext() :

  repository
      .findAll()
      .test()
      .expectSubscription()
      .expectNext(listOf(page(PATH_1), page(PATH_2)).toFlux())
      .expectNext(listOf(page(PATH_3), page(PATH_4)).toFlux())
      .expectNext(listOf(page(PATH_5)).toFlux())
      .verifyComplete()
 

Чего мне не хватает

Ответ №1:

Ожидаемое следующее использование равно вот почему это сбой, даже если оба потока содержат одни и те же данные, они не совпадают.

Что вы могли бы сделать, так это следующее:

 repository().findAll()
        .test()
        .expectSubscription()
        .assertNext {
            it.test()
                    .expectNext(page(PATH_1), page(PATH_2))
                    .verifyComplete()
        }.assertNext {
            it.test()
                    .expectNext(page(PATH_3), page(PATH_4))
                    .verifyComplete()
        }.assertNext {
            it.test()
                    .expectNext(page(PATH_5))
                    .verifyComplete()
        }.verifyComplete()

 

Я не знаю, есть ли лучший вариант, но это должно сработать.