首页 > 解决方案 > 使用 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);
    }

}

测试成功,这是失败。

标签: javaspringspring-bootjunitspring-security

解决方案


如果要测试 Spring Security 注释,则需要使用SpringRunner它将创建 Spring Context 并将 Spring Security 代码注入代理类。

如何测试 Spring Security 你可以在这里找到。


推荐阅读