我正在尝试使用 JWT 测试登录,但每次我尝试测试此方法时,它都会给我一个:
java.lang.NullPointerException: Cannot invoke "it.security.jwt.JwtTokenUtil.generateToken(org.springframework.security.core.userdetails.UserDetails)" because "this.jwtTokenUtil" is null
我用的类是这样的:
@SpringBootTest
@RunWith(SpringRunner.class)
public class AuthenticationRestControllerTest {
@Autowired
private JwtTokenUtil jwtTokenUtil;
@Test
public void loginTest() throws Exception {
JwtUser userDetails;
userDetails = JwtUserFactory.create("user", null);
String token = jwtTokenUtil.generateToken(userDetails);
Assert.assertNotNull(token);
}
}
我也尝试过模拟和其他测试,但对我没有用。
知道我错过了什么吗?
或任何改进我的登录测试的东西
您的
JwtTokenUtil
类可能未在 Spring 容器中注册为 bean,因此无法使用 @Autowired
将其作为依赖项注入到其他类。
为了让 Spring 管理 bean,您必须:
使它成为一个组件,使用
@Component
或其衍生物——@Service
和@Repository
:
@Component
public class JwtTokenUtil {
// your class' fields and methods
}
... 或者使其成为用
@Bean
注释的方法的返回类型,这 表示方法生成一个由 Spring 容器管理的 bean(来自 Spring 的 API 文档 的定义)。通常,像这样的方法是在 @Configuration
类中声明的,因为它会在您的应用程序启动时立即加载,而 Spring 的应用程序上下文会搜索 bean 以注册到 Spring 容器:
@Configuration
public class AppConfig {
@Bean
public JwtTokenUtil jwtTokenUtil() {
return new JwtTokenUtil();
}
}
Obs.: 我想问你是否已经这样做了,但不幸的是我无法对你的问题添加评论,因为我还没有 50 的声誉。我希望它能帮助你。