java - 使用 JUnit 测试具有 @PreAuthorize 的服务方法
问题描述
在 Spring Boot 1.4.1 中,我想对使用 @PreAuthorize 访问受限的服务方法进行单元测试(而不是集成测试)。
问题是从 Eclipse 启动测试独奏时似乎没有检查 @PreAuthorize (尚未尝试使用 mvn test)。
然后,如果我奇迹般地设法正确运行测试,我将尝试使用 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);
}
}
这是服务:
@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 代码注入代理类。
如何测试 Spring Security 你可以在这里找到。
推荐阅读
- node.js - Mongo 并发 - collection.find() 返回重复文档
- c# - 从根本上说,AJAX 调用与 ASP.NET 中的表单提交有何不同?
- micropython - 在 Micropython 中转换字节字符串
- linux - 仅接受 4 个字符长的十进制数字作为用户输入以供读取
- ssas - 2012 年 SSAS 表格中提供了一个包含多个值的表格
- spring - 如何使用私有 Github 存储库引导 Spring Cloud 配置服务器?
- elasticsearch - 是否可以从 Elasticsearch 中检索所有活动滚动上下文的信息?
- c - 信号处理程序终止程序
- javascript - createElement() 和 textarea 的问题
- sftp - SFTP 服务器包含错误,消息为 ssh_exchange_identification:读取:对等方重置连接