使用Spring JPA派生查询继续获取nullpointerexception

问题描述

我的实体类如下

@Entity
public class User {
    @Id
    @Column(length = 50)
    private String email;
    @Column(length = 50,nullable=false)
    private String name;
    @Column(length = 50,nullable=false)
    private String password;

我的存储库看起来像这样

public interface UserRepository extends CrudRepository<User,String>{
    User findByEmail(String email);
}

我正在使用像这样的Junit测试

public class UserDAOTest {

    @Autowired
    private UserRepository userRepository;

    @Test
    @Transactional
    public void validateUserTest1() {
        User u = userRepository.findByEmail("jim.gordon@gmail.com");
        }

}

在看到类中的相似内容后,我自己创建了该用户类。但是,我无法使它正常工作。我在这里错过了什么吗?我尝试了很多不同的方法并进行了谷歌搜索,但是找不到为什么我不断得到nullpointerexception的原因。

在junit测试用例中,完整的堆栈跟踪看起来像这样。

java.lang.NullPointerException
    at com.BarShelf.tests.UserDAOTest.validateUserTest1(UserDAOTest.java:22)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:564)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
    at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
    at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
    at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
    at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:89)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:41)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:542)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:770)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:464)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:210)

解决方法

默认情况下,Junit测试类不了解spring上下文。因此,在您的代码中,@Autowired注释将被忽略,而userRepository仍为空。

为了使JUnit使用spring上下文,您必须在测试类中添加注释:

如果您使用spring boot并具有主要配置类:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { YourConfigurationClass.class })
public class UserDAOTest {
    ...

如果您使用xml上下文文件:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/your-spring-config-file.xml")
public class UserDAOTest {
    ...

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...