Возникновение NPE при использовании `WebTestClient.mutateWith()` в сквозных тестах

Когда я написал несколько тестов для webflux приложений. И я попытался добавить учетные данные через mutateWith(mockUser().password("password")) в WebTestClient, но это вызвало выброс NPE.

Я использовал bindToServer для подключения тестового клиента к работающим удаленным API и пытался использовать mutateWith(mockUser().password("password")) для добавления базовой аутентификации в запрос. Он бросает NPE при тестах.

Обновленные исходные коды: https://github.com/hantsy/spring-reactive-sample/blob/master/security-method/src/test/java/com/example/demo/IntegrationTests.java#L118-L127


person Hantsy    schedule 20.09.2017    source источник
comment
не могли бы вы скопировать/вставить сюда свой код, а также полную трассировку стека?   -  person Brian Clozel    schedule 20.09.2017
comment
Кажется, это моя ошибка в исходных кодах, mutateWith(mockUser()) должен работать только в среде MockServer. Я изменил коды, чтобы использовать mutate для создания базовой аутентификации вручную, это привело к тому, что запрос был заблокирован до истечения времени ожидания.   -  person Hantsy    schedule 21.09.2017
comment
так ваша проблема решена? тогда не стесняйтесь отвечать на свой вопрос, это может помочь другим.   -  person Brian Clozel    schedule 21.09.2017
comment
@BrianClozel Спасибо за ваше предложение. Я обновил свой оригинальный пост, надеюсь, он будет полезен другим. Но еще одна проблема, с которой я столкнулся после того, как сделал это, выполнение зависло (запрос заблокирован) до истечения времени ожидания, я описал в другом вопросе, stackoverflow.com/questions/46325916/   -  person Hantsy    schedule 22.09.2017
comment
вам лучше правильно ответить на исходный вопрос или закрыть его, если вы считаете, что это опечатка. В противном случае люди увидят в этом нерешенный вопрос.   -  person Brian Clozel    schedule 22.09.2017
comment
@BrianClozel понял, спасибо.   -  person Hantsy    schedule 22.09.2017


Ответы (1)


После того, как я изучил исходные коды mockUser, для запуска тестов требуется среда MockServer, но в моем примере она выполнялась как end 2 end.

Изменил mutateWith(mockUser().password("password")) на .mutate().filter(basicAuthentication("user", "password")).build(), NPE исчез.

Надеюсь, это полезно для вас.

@Test public void deletingPostsWhenUserCredentialsThenForbidden_mutateWith() throws Exception { this.rest .mutate().filter(basicAuthentication("user", "password")).build() .delete() .uri("/posts/1") .exchange() .expectStatus().is4xxClientError() .expectBody().isEmpty(); }

Обновленные исходные коды: https://github.com/hantsy/spring-reactive-sample/blob/master/security-method/src/test/java/com/example/demo/IntegrationTests.java#L118-L127

person Hantsy    schedule 22.09.2017