栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在需要身份验证的控制器上运行单元测试

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在需要身份验证的控制器上运行单元测试

您需要指定要以哪个用户身份运行测试。您有几个选项(每个选项都是详细文档的链接):

@WithMockUser

此选项将创建一个伪造的用户(即该用户不必存在于数据存储中)。这种方法的问题是,如果您的应用程序依赖于自定义的User实现,则可能会得到类强制转换异常。如果您没有从自定义UserDetailsS​​ervice返回自定义类型,则此解决方案应该可以正常工作。

 @Test @WithMockUser(username="admin",roles={"USER","ADMIN"}) public void changePasswordWorks() throws Exception {

@WithUserDetails

如果您实现了返回UserDetails的自定义实现的自定义UserDetailsS​​ervice,则此解决方案可能对您有用。

为了使其正常工作,您需要将UserDetailsS​​ervice公开为Bean,并且该用户必须存在。例如:

 @Test @WithUserDetails("admin") public void changePasswordWorks() throws Exception {

@WithSecurityContext

这是两全其美的做法,但需要一些额外的设置。如果您具有返回UserDetails的自定义实现的自定义UserDetailsS​​ervice,并且不希望用户必须存在,则可以使用此方法。我将让您阅读有关此设置的文档,因为该文档冗长且文档齐全。

使用RequestPostProcessor

如果注释不是您的事,则可以使用RequestPostProcessor。例如:

import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.*; ... @Test public void changePasswordWorks() throws Exception {     // Send password change request     PasswordChangeRepresentation passwordChange = new PasswordChangeRepresentation(DefaultUsers.Admin.getPassword(), "12345678");     mockMvc.perform(MockMvcRequestBuilders.request(HttpMethod.POST, "/password/change")  // ADD this line  .with(user("admin").roles("USER","ADMIN"))  .content(new ObjectMapper().writevalueAsString(passwordChange))  .contentType(MediaType.APPLICATION_JSON)  .accept(MediaType.APPLICATION_JSON))  .andExpect(status().isOk());     // Check that the password has been changed     User user = this.userRepository.findByUsername(DefaultUsers.Admin.getEmail());     Assert.assertEquals(user.getPassword(), "12345678");}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/466186.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号