Установка SecurityContextHolder.setContext (...) в макет переносит на разные тестовые классы даже с @DirtiesContext - PullRequest
0 голосов
/ 07 мая 2018

В одном из моих тестовых занятий я использую:

//Make a security context
SecurityContext securityContext = mock( SecurityContext.class );
SecurityContextHolder.setContext( securityContext );

А потом я поставил некоторые вещи на это.

В другом тестовом классе я получаю сбой из-за этой насмешки, которая все еще там Я добавил @DirtiesContext на все тестовые классы, но это все еще происходит. Когда я проверяю класс контекста безопасности во 2-м классе, он говорит, что это макет.

Как мне правильно сбросить все между классами?

Первый класс запускается как:

@RunWith( SpringJUnit4ClassRunner.class )
@SpringBootTest(
    webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT
)
@DirtiesContext

А второй просто:

@RunWith( SpringJUnit4ClassRunner.class )
@DirtiesContext

1 Ответ

0 голосов
/ 07 мая 2018

Слово "контекст" сбивает вас с толку.

Это два очень разных "контекста".

@DirtiesContext относится к тесту ApplicationContext; тогда как SecurityContext является частью Spring Security и не имеет ничего общего с ApplicationContext.

Таким образом, если вы установили SecurityContext в SecurityContextHolder Spring Security, ваша задача - удалить его после завершения теста.

Последнее требует ручной работы с вашей стороны. Если вы хотите, чтобы поддержка тестирования Spring Security позаботилась обо всем, вы, вероятно, будете более довольны @WithMockUser и соответствующей поддержкой тестирования в spring-security-test.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...