Sri*_*inu 4 junit spring-security mockito
当我试图嘲笑
SecurityContextHolder.getContext().getAuthentication().getCredentials()
Run Code Online (Sandbox Code Playgroud)
要获取Mapof UserDetails,它会返回错误。
任何人都可以建议使用 Mockito 完成此任务的最佳方法吗?
Ken*_*han 13
存储SecurityContext在里面ThreadLocal。在运行测试用例之前,您必须为当前正在运行的线程SecurityContextHolder.getContext()创建SecurityContext并为其设置模拟Authentication,这相当于登录。
测试用例结束后,可以使用SecurityContextHolder.clearContext()清除SecurityContext,ThreadLocal相当于注销。
就代码而言,它看起来像:
@ExtendWith(MockitoExtension.class)
public class TestSecurity {
@Mock
private Authentication auth;
@BeforeEach
public void initSecurityContext() {
when(auth.getCredentials()).thenReturn("mockedPassword");
SecurityContextHolder.getContext().setAuthentication(auth);
}
@Test
public void test() {
//Access getCredentials() which should return the mocked password
SecurityContextHolder.getContext().getAuthentication().getCredentials();
}
@AfterEach
public void clearSecurityContext() {
SecurityContextHolder.clearContext();
}
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您有兴趣,您也可以考虑使用@WithMockUserSpring Security Test 来模拟Authentication而不是使用Mockito.
| 归档时间: |
|
| 查看次数: |
8803 次 |
| 最近记录: |