无法在Junit TestCase for Controller

时间:2017-07-24 09:36:05

标签: java junit mockito

这是我的控制器类:

@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。请帮帮我。

2 个答案:

答案 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则优先)或使用userwhen(user.getXXX()).thenhReturn(xxx)

定义doReturn(xxx).when(user).getXXX();模拟行为