Jul*_*ien 5 java junit spring spring-security spring-boot
在 Spring Boot 1.4.1 中,我想对使用 @PreAuthorize 限制访问的服务方法进行单元测试(而不是集成测试)。
问题是从 Eclipse 启动单独测试时似乎没有检查 @PreAuthorize(尚未尝试使用 mvn 测试)。
然后,如果我奇迹般地设法正确运行测试,我将尝试使用 StudyService 接口,而不是 impl。
这是我的测试课:
@RunWith(MockitoJUnitRunner.class)
public class TestMethodSecurity {
private static final Long STUDY_ID = 1L;
@Mock
private StudyRepository studyRepository;
@InjectMocks
private StudyServiceImpl studyService;
@Before
public void setup() {
given(studyRepository.findOne(STUDY_ID)).willReturn(ModelsUtil.createStudy());
}
@Test
public void findByIdWithoutAccessRightTest() {
Study study = studyService.findById(STUDY_ID);
}
}
Run Code Online (Sandbox Code Playgroud)
这是服务:
@Service
public class StudyServiceImpl implements StudyService {
@Autowired
private StudyRepository studyRepository;
@Override
@PreAuthorize("hasAnyRole('DOES NOT EVENT CHECK SYNTAX")
public Study findById(final Long id) {
return studyRepository.findOne(id);
}
}
Run Code Online (Sandbox Code Playgroud)
测试成功,结果失败。
Jul*_*ien -1
这就是我让它发挥作用的方式:
@RunWith(SpringRunner.class)
@SpringBootTest
@EnableGlobalMethodSecurity(prePostEnabled = true)
@ActiveProfiles("test")
public class StudySecurityTest {
@Autowired
private StudyService service;
@MockBean
private StudyRepository repository;
@Test
@WithAnonymousUser
public void testAsAnonymous() {
...
}
@Test
@WithMockKeycloakUser(id = LOGGED_USER_ID, username = LOGGED_USER_USERNAME, authorities = { "ROLE_USER" })
public void testAsUser() {
...
}
}
Run Code Online (Sandbox Code Playgroud)
如果您对此感兴趣@WithMockKeycloakUser,请询问我。
| 归档时间: |
|
| 查看次数: |
5921 次 |
| 最近记录: |