这是我的控制器类:
@RequestMapping(value="/administration", method=RequestMethod.GET)
public ModelAndView adminstrationPage(HttpServletRequest request){
ModelAndView mv = new ModelAndView();
mv.setViewName("administration");
Optional<User> uo = userRepository.findOneByName(request.getUserPrincipal().getName());
... return mv;
}
这是我的登录控制器测试:
@InjectMocks
LoginController loginController;
@Mock
private LoginService loginService;
@Mock
private UserRepository userRepository;
@Mock
User user;
MockMvc mockMvc;
@Test
public void administartion() throws Exception{
Mockito.when(userRepository.findOneByName("test")).thenReturn(Optional.of(user));
mockMvc.perform(get("/administration"))
.andExpect(status().isOk());
}
现在获得嵌套异常的是java.lang.NullPointerException。请帮助我。
模拟用户存储库时,而不是userRepository.findOneByName("")
尝试userRepository.findOneByName(anyString())
. 并且不要忘记在方法之前初始化模拟,MockitoAnnotations.initMocks(this);
user.setId(100000L); user.setName("testName"); user.setEmail("testEmail@gmail.com");
由于user
是一个模拟,这些陈述是无用的。
要么创建一个真正的User
对象(如果是简单的 DTO,则首选(,要么使用when(user.getXXX()).thenhReturn(xxx)
或doReturn(xxx).when(user).getXXX();
定义user
模拟行为