簡體   English   中英

如何使用MockMvc和Mockito測試無狀態

[英]How to test stateless with MockMvc and Mockito

我最近繼承了一些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());
        }
    }

我花了很長時間才能找到答案,這是我最終得到的結果,以防萬一有人在掙扎:

在測試中將SessionCreationPolicy從'If_REQUIRED'或'ALWAYS'更改為'STATELESS'之后:替換import .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")))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM