retryWhen () не вызывает то, что находится внутри Observable.just ()

У меня есть тест, в котором я проверяю механизм повтора для авторизации токена. Внутри этого теста я возвращаю null как токен в начале, а затем возвращаю действительный токен, например:

whenever(accountManager.getToken()) .thenReturn(null) .thenReturn("some_token") 

Тогда у меня есть Наблюдение:

  return Observable.just(accountManager.getToken()) ... .retryWhen { retryOnAuthExceptionWithBackoff(it) } 

Он должен получить токен, отправить его где-нибудь, дождаться ответа, а затем ответ будет неправильным, повторите весь процесс до тех пор, пока он не удастся.

Проблема в том, что когда retryWhen() , наблюдаемый источник не вызывается снова, сразу же возвращается его начальное значение.

С другой стороны, это работает:

  return Observable.just(null) .map{ accountManager.getToken() } ... .retryWhen { retryOnAuthExceptionWithBackoff(it) } 

Это по дизайну или это ошибка? Если это по дизайну, то что было бы элегантным способом написать это, потому что Observable.just(null) выглядит просто уродливо.

Функция just() берет ссылку на константу и сохраняет одну и ту же ссылку на подписчиков.

Что вам нужно, это fromCallable :

 Observable.fromCallable(() -> accountManager.getToken()) ... 

Когда приходит новый абонент (например, повторная попытка), лямбда выполняется снова.