Как проверить безгражданство с MockMvc и Mockito - PullRequest
0 голосов
/ 24 октября 2018

Я недавно унаследовал некоторый код Java, который должен переключиться на состояние без состояния в конфигурации HttpSecurity:

http.csrf().disable()
    .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);

После этого некоторые тесты с использованием MockMvc не прошли.Я знаю, что @WithMockUser не будет работать с лицами без состояния, так что я должен изменить, чтобы он прошел?Вот пример теста:

    @Before
    public void setUp() throws Exception {

        this.mockMvc = MockMvcBuilders.standaloneSetup(apAdminController)
            .apply(SecurityMockMvcConfigurers.springSecurity(springSecurityFilterChain))
            .setCustomArgumentResolvers(new PageableHandlerMethodArgumentResolver())
            .build();

        storeUser = new StoreUser();
        storeUser.setUsername("smith");
        storeUser.setEnabled(true);
    }

    @Test
    @WithMockUser(roles = "ADMIN")
    public void testViewStoreUserWithAdmin() {
        try {
            mockMvc.perform(
                get("{resource}/1", RESOURCE).with(testSecurityContext()))
                .andDo(print())
                .andExpect(status().isOk());

        } catch (Exception e) {
            fail("Test failed: " + e.getMessage());
        }
    }

1 Ответ

0 голосов
/ 08 ноября 2018

Мне потребовалось много времени, чтобы найти ответы, вот что я получил в итоге на случай, если кто-то испытывает затруднения:

После изменения SessionCreationPolicy с 'If_REQUIRED' или 'ВСЕГДА' на 'STATELESS' натесты: замените импорт .SecurityMockMvcRequestPostProcessors.testSecurityContext; на импорт .SecurityMockMvcRequestPostProcessors.user;

и используйте его в настройках:

this.mockMvc = MockMvcBuilders.webAppContextSetup(context)
            .addFilters(springSecurityFilterChain)
            .build();

Удалите всю аннотацию @WithMockUser и, наконец, измените

get("{resource}", RESOURCE).with(testSecurityContext()))

до get("{resource}", RESOURCE).with(user("admin").roles("ADMIN")))

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