无法在 spring boot 测试中自动装配方法

问题描述 投票:0回答:1

我正在尝试使用 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);
    }
}

我也尝试过模拟和其他测试,但对我没有用。

知道我错过了什么吗?

或任何改进我的登录测试的东西

java spring-boot junit mockito spring-test
1个回答
0
投票

您的

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 的声誉。我希望它能帮助你。

© www.soinside.com 2019 - 2024. All rights reserved.