Hen*_*dra 0 junit unit-testing mockito spring-boot
这是 Spring Boot 项目。它使用SecurityContext。
它的大多数 Rest 控制器和服务取决于其登录用户的角色,以用于验证目的。所以在测试过程中,我需要一个用户登录。
请告知我针对 Spring boot 的单元测试代码示例,涉及登录用户进程。
@RunWith(PowerMockRunner.class)
@PrepareForTest({SecurityContextHolder.class,AuthenticationManager.class,UserRepository.class,UserCreationRequestRepository.class, PasswordEncoder.class,AuthorityRepository.class,CacheManager.class,POMasterCompanyRepository.class,BranchRepository.class})
public class BOAuthControllerTest {
@Autowired
private WebApplicationContext context;
@Mock
private AuthenticationManager authenticationManager;
@Mock
private UserRepository userRepository;
@Mock
private UserCreationRequestRepository userCreationRequestRepository;
@Mock
private PasswordEncoder passwordEncoder;
@Mock
private AuthorityRepository authorityRepository;
@Mock
private CacheManager cacheManager;
@Mock
private POMasterCompanyRepository poMasterCompanyRepository;
@Mock
private BranchRepository branchRepository;
private UserService userService;
private MockMvc mockMvc;
@Before
public void setup() {
userService = new UserService(userRepository, passwordEncoder, authorityRepository, cacheManager, userCreationRequestRepository,
poMasterCompanyRepository,branchRepository);
UsernamePasswordAuthenticationToken authenticationToken =
new UsernamePasswordAuthenticationToken("admin","admin");
Authentication authentication = this.authenticationManager.authenticate(authenticationToken);
SecurityContextHolder.getContext().setAuthentication(authentication);
SecurityContext securityContext = new SecurityContextImpl();
securityContext.setAuthentication(authentication);
System.out.println(authenticationToken==null?"null":"not null");
System.out.println(authenticationManager==null?"null":"not null");
System.out.println(authentication==null?"null":"not null");
System.out.println(SecurityContextHolder.getContext()==null?"null":"not null");
System.out.println(SecurityContextHolder.getContext().getAuthentication()==null?"null":"not null");
System.out.println(SecurityContextHolder.getContext().getAuthentication().getName());
System.out.println(securityContext.getAuthentication().getName());
PowerMockito.mockStatic(SecurityContextHolder.class);
when(SecurityContextHolder.getContext()).thenReturn(securityContext);
System.out.println(userService.getUserWithAuthorities().isPresent());
}
@Test
public void loginAvailableForAll() throws Exception {
System.out.println(userService.getUserWithAuthorities().isPresent());
}
Run Code Online (Sandbox Code Playgroud)
}
而不是PowerMock自己去设置背景。
由于它是静态方法,因此您可以SecurityContextHolder.setContext(securityContext)在方法中进行该调用@Before。
例子:
@Before
void initContext(){
SecurityContext securityContext = new SecurityContextImpl();
securityContext.setAuthentication(new TestingAuthenticationToken(null,null,authorities));
SecurityContextHolder.setContext(securityContext);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6443 次 |
| 最近记录: |