【发布时间】: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