Java 找不到jUnit测试返回NullPointerException的原因

Java 找不到jUnit测试返回NullPointerException的原因,java,unit-testing,spring-boot-test,Java,Unit Testing,Spring Boot Test,我有一个简单的SpringBootREST应用程序,它从数据库返回用户列表。 应用程序按预期工作,但测试场景因错误而失败。经过长时间的谷歌搜索,我还是不明白为什么? 似乎测试类无法访问userRepository,它调用的不是userRepository.getAllUsers,而是AppController.getAllUsers org.springframework.web.util.NestedServletException: Request processing failed; ne

我有一个简单的SpringBootREST应用程序,它从数据库返回用户列表。 应用程序按预期工作,但测试场景因错误而失败。经过长时间的谷歌搜索,我还是不明白为什么? 似乎测试类无法访问userRepository,它调用的不是userRepository.getAllUsers,而是AppController.getAllUsers

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException
……………………………
Caused by: java.lang.NullPointerException
    at com.loan.demo.controller.AppController.getAllUsers(AppController.java:43)
 …………………………………………..
这些是我的课程: loanapplication

@SpringBootApplication
public class LoanAppApplication {
public static void main(String[] args) {
    SpringApplication.run(LoanAppApplication.class, args);
}
}
类User.java

@Entity
@Table(name="USERTABLE")
public class User {
private int id;
@NotNull
private String firstName;
@NotNull
private String lastName;
@NotNull
private String persID;
private int blocked;
private Set<Loan> loans;

public User() {
}
public User(String firstName, String lastName, String persID) {
    this.firstName = firstName;
    this.lastName = lastName;
    this.persID = persID;
}

您需要模拟您的用户存储库

@Mock
UserRepository userRepository;
因此,在@Mock之后,您需要在@Before中初始化Mock,添加以下内容:

MockitoAnnotations.initMocks(this);
然后,在代码设置中,您希望获得哪些用户

User user = new User();
when(userRepository.getUsers()).thenReturn(Collections.singletonList(user));
然后检查

verify(userRepository, times(1)).getUsers();
verifyNoMoreInteractions(userRepository);
这是因为您的应用程序上下文不工作

MockitoAnnotations.initMocks(this);
User user = new User();
when(userRepository.getUsers()).thenReturn(Collections.singletonList(user));
verify(userRepository, times(1)).getUsers();
verifyNoMoreInteractions(userRepository);