在 Spring Boot 1.4.1 中,我想对使用 @PreAuthorize 限制访问的服务方法进行单元测试(而不是集成测试)。
问题是从 Eclipse 启动测试单独时似乎没有检查 @PreAuthorize(尚未尝试使用 mvn 测试)。
然后,如果我奇迹般地设法正确运行测试,我将尝试使用 StudyService 接口(interface),而不是实现。
这是我的测试类:
@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);
}
}
这是服务:
@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);
}
}
测试成功,测试失败。
最佳答案
如果你想测试 Spring Security 注解,你需要使用 SpringRunner
它将创建 Spring Context 并将 Spring Security 代码注入(inject)代理类。
如何测试 Spring Security 你可以找到here .
关于java - 使用 JUnit 测试具有 @PreAuthorize 的服务方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54424892/