访问 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
当我在测试中 运行 时,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