测试JWT sub值提取方法:如何给Mock Token设置sub值?
解决JwtAuthenticationToken Mock测试中设置sub值的问题
你的测试代码核心问题是没有正确构造getTokenAttributes()返回的Map,导致sub值无法被待测试方法提取。直接构造一个包含目标sub键值对的Map即可解决:
修改后的测试代码
@Test void testEndpoint() { // 构造包含指定sub值的属性Map Map<String, Object> tokenAttributes = new HashMap<>(); tokenAttributes.put("sub", "subValue"); // Mock JwtAuthenticationToken对象,指定getTokenAttributes的返回值 JwtAuthenticationToken principal = Mockito.mock(JwtAuthenticationToken.class); Mockito.when(principal.getTokenAttributes()).thenReturn(tokenAttributes); // 调用待测试方法并断言结果 String sub = subExtractionService.getSub(principal); Assertions.assertEquals("subValue", sub); }
额外优化建议
你的待测试方法实现过于冗余,完全可以简化,避免不必要的字符串替换操作:
public String getSub(JwtAuthenticationToken principal) { return (String) principal.getTokenAttributes().get("sub"); }
简化后逻辑更清晰,也能减少测试中潜在的字符串处理问题。
内容的提问来源于stack exchange,提问作者RandolfDerGraue
相关产品推荐
相关产品推荐

