无法在控制器的 Junit 测试用例中设置模拟值



这是我的控制器类:

@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模拟行为

最新更新