这是我的控制器类:
@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;
}
这是我的 LoginControllerTest :
@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。请帮帮我。
答案 0 :(得分:0)
模拟用户存储库时,而不是userRepository.findOneByName("")
试试userRepository.findOneByName(anyString())
。
并且不要忘记在方法MockitoAnnotations.initMocks(this);
答案 1 :(得分:0)
user.setId(100000L); user.setName("testName"); user.setEmail("testEmail@gmail.com");
由于user
是模拟,因此这些语句无用。
创建一个真实的User
对象(如果它是简单的DTO则优先)或使用user
或when(user.getXXX()).thenhReturn(xxx)
doReturn(xxx).when(user).getXXX();
模拟行为