java - 使用 JUnit 测试具有 @PreAuthorize 的服务方法

标签 java spring spring-boot junit spring-security

在 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/

相关文章:

java - JNA:指向字符的指针**

java - 使用 MigLayout 将两个组件叠放在一起

spring - 如何使用 Dbunit 测试没有 Hibernate 实体的表的 Dao

java - Spring RestTemplate - 根据 http 状态代码读取不同的对象类型?

java - 如何设置 Spring Security 以允许来自特定应用程序的 REST 调用?

java - 从命令提示符运行批处理文件出现错误

java - 在相同情况下 @XmlJavaTypeAdapter 被忽略

java - Spring 3 注释 : xml-less Declarative Transaction Management

java - 如何在 Spring Boot 中创建部分异步发布请求?

java - RestTemplate 访问 Response 中的元素