代码之家  ›  专栏  ›  技术社区  ›  Annie C

如何用MockMvc和Mockito测试无状态

  •  0
  • Annie C  · 技术社区  · 6 年前

    我最近继承了一些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 回复  |  直到 6 年前
        1
  •  0
  •   Annie C    6 年前

    将SessionCreationPolicy从“If\u REQUIRED”或“ALWAYS”更改为“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")))

    推荐文章