我正在为Controller层编写单元测试用例。我有一个调用,我从Spring SecurityContextHolder获取用户。当我运行我的测试用例时,我得到Null指针异常,因为我不知道如何模拟Spring安全上下文。
以下是我的代码,有任何建议怎么做?
Controller Methhod:
@RequestMapping(method = RequestMethod.POST)
public void saveSettings(@RequestBody EmailSettingDTO emailSetting) {
User user = ((CurrentUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getUser();
settings.saveUserEmailSetting(user, emailSetting);
}
我的测试案例:
@Test public void testSaveSettings() throws Exception {
mockMvc.perform(post(BASE_URL).content(this.objectMapper.writeValueAsString(emailDto))
.contentType(MediaTypes.HAL_JSON)).andExpect(status().isOk());
}
答案 0 :(得分:0)
为此目的有一个Spring Security Test库。
您可以使用"domain\alias"
来实现此目的。请参阅post
答案 1 :(得分:0)
您可以使用@WithUserDetails
可以将此注释添加到测试方法中,以模拟使用UserDetailsService返回的UserDetails运行。
通过使用它,您可以创建一个上下文来运行测试,例如:
@Test
@WithUserDetails("admin")
public void testAdmin() throws Exception {
mockMvc.perform(...);
}
这将使用testAdmin()
admin。
SecurityContext
但请注意,为了使用它;必须有一个名为User
的{{1}}保留,否则您将获得结果例外。