访问 Spring 数据 jpa 中的 JPARepository 方法时出现空指针错误

Null pointer Error when accessing JPARepository method in Spring data jpa

当我在测试中 运行 时,NullPointerException 出现在以下行中: 账户acc = accRepo.findAccountById(Long id); 就好像 findAccountById(Long id) returns 为空。但是当我直接在任何其他测试方法中调用此方法时,它工作正常。

我的存储库文件

public Interface AccountRepo extends JpaRepository<Account,Long>{
    
    @Query("select a from Account a where a.id  = ?1")
    public List<Account> findAccountById(Long id);

}

服务接口和实现

public Interface AccountService{
    Account showAcc();
}

@Service
public class AccServiceImpl implements AccountService {
    
    @Autowired
    private AccountRepo accRepo;

    @Override
    Account showAcc(){
        Long id = 10L;
        Account acc = accRepo.findAccountById(id); // Null Pointer exception at this line
        String name = acc.getName();
        System.out.println(name);
    }

}

@Autowired
AccountServiceimpl accServImpl;

@Test
public void testAccount(){
    
    accServImpl.showAcc();
}

你有空指针异常,因为如果你在 运行 测试框架上下文之外得到 NPE,AccountRepo 不会在你的测试用例或实际设置中自动装配。您需要检查您的测试配置并确保您的测试框架创建并注入了 accountrepo 实例。

您需要在测试中为您的AccServiceImpl 提供一个AccountRepo。 @Autowired 注释仅在您具有应用程序上下文时才有效,而您的测试并非如此。

因此您需要在 AccServiceImpl 中添加一个 setter 或构造函数来提供 AccountRepo。

如果您想使用应用程序上下文进行测试,您需要实现一个@SpringBootTest