【问题标题】:How to test JWT expiration in Spring REST?如何在 Spring REST 中测试 JWT 过期?
【发布时间】:2021-08-03 16:19:23
【问题描述】:

我想编写一个单元测试来检查 JWT 是否过期。我使用 Mockito.spy 抛出异常,但不起作用。到目前为止,这是我的进展:

@Test
public void hello_fail_expired_token() throws Exception {
    User user = FakeDataGenerator.generateFakeUser();
    User registeredUser = userService.register(user.getEmail(), user.getPassword(), user.getName());
    String token = jwtService.generateToken(registeredUser);
    Mockito.doThrow(new JWTExpiredException()).when(Mockito.spy(jwtService)).verifyToken(token);
    MockHttpServletRequestBuilder mockRequest = MockMvcRequestBuilders.get("/user/hello")
            .contentType(MediaType.APPLICATION_JSON)
            .accept(MediaType.APPLICATION_JSON)
            .header("Authorization", "Bearer " + token);
    System.out.println(mockMvc.perform(mockRequest).andReturn().getResponse().getContentAsString());
}

该方法执行后,不抛出异常。我的错是什么?

【问题讨论】:

  • 问题可能在于你如何配置mockMvc。它可能没有调用您的 verifyToken 方法。在您的 jwtService.verifyToken 方法中放置一个断点以查看它是否被调用。如果是,请确保您的匹配器是正确的。如果它没有被调用,请确保您已使用 FilterChainProxy 配置了 mockMvc。如果您将发布有关如何构建 mockMvc 以及如何注入 jwtService 的更多详细信息,它将有助于回答它。

标签: spring spring-boot unit-testing testing


【解决方案1】:

我想通了。之前:

@Autowired
JWTService jwtService;

现在:

@Spy
JWTService jwtService;

在测试方法中,之前:

Mockito.doThrow(new JWTExpiredException()).when(Mockito.spy(jwtService)).verifyToken(token);

之后:

Mockito.doThrow(new JWTExpiredException()).when(jwtService).verifyToken(token);

【讨论】:

    猜你喜欢
    • 2015-05-12
    • 2021-12-17
    • 2019-07-20
    • 2018-04-27
    • 2023-03-08
    • 2016-02-05
    • 2012-05-10
    • 2016-04-17
    • 1970-01-01
    相关资源
    最近更新 更多