测试中的ReactiveSecurityContextHolder无法按预期工作

时间:2019-08-18 16:44:45

标签: java mockito spring-webflux

我有一个简单的方法,只需少量逻辑即可使用当前用户的名称。该代码可以按预期使用,但我似乎无法通过测试。

我要测试的方法:

Mono<Circle> getCircleByIdWithUserPermission(final String circleId) {

    return ReactiveSecurityContextHolder.getContext()
            .map(SecurityContext::getAuthentication)
            .flatMap(authentication ->
                    circleRepository.findById(circleId)
                            .flatMap(circle -> circle.getUsers().contains(authentication.getName())
                                    ? Mono.just(circle) : Mono.error(new ForbiddenException()))
            );

}

还有我到目前为止编写的测试:

@Test
@WithMockUser(username = "test-user")
public void getCircleByIdWithUserPermission() {
    when(circleRepositoryMock.findById("1")).thenReturn(Mono.just(circleOne));

    StepVerifier.create(circleServiceMock.getCircleByIdWithUserPermission("1"))
            .expectNext(circleOne)
            .expectComplete()
            .verify();
}

但是测试始终以actual: onComplete())失败,因此它永远不会使用circleRepositoryMock.findById("1")

如果我删除

ReactiveSecurityContextHolder.getContext()
            .map(SecurityContext::getAuthentication)

并对测试值进行硬编码,它可以按预期工作。

这里有什么我可以俯瞰的地方吗?

编辑:

模拟只是一个简单的事情:

@RunWith(MockitoJUnitRunner.class)
public class CircleServiceImplTest {

    @InjectMocks
    private CircleServiceImpl circleServiceMock;

    @Mock
    private CircleRepository circleRepositoryMock;

    //..

0 个答案:

没有答案