Макет контроллера Spring Junit не работает

У меня есть следующий контроллер, и я хочу провести на нем тест Junit,

@RequestMapping(value = "/path", method = RequestMethod.Get)
public String getMyPath(HttpServletRequest request, Model model) {

    Principal principal = request.getUserPrincipal();
    if (principal != null) {
        model.addAttribute("username", principal.getName());
    }
    return "view";
}

Метод JUnit выглядит следующим образом:

@Test
public void testGetMyPath() throws Exception {

    when(principalMock.getName()).thenReturn("someName");

    this.mockMvc.perform(get("/path")).andExpect(status().isOk());
}

PrincipalMock объявлен так:

@Mock
private Principal principalMock;

Проблема в том, что я получаю исключение NullPointerException в этой строке при вызове метода getName () для принципала.

model.addAttribute("username", principal.getName());

person Jones    schedule 16.05.2014    source источник
comment
Почему вы отправляете POST в свой тест, когда отображение запроса - GET?   -  person geoand    schedule 16.05.2014
comment
Я отредактировал вопрос,   -  person Jones    schedule 16.05.2014


Ответы (1)


Ваше издевательство над принципалом не имеет абсолютно никакого эффекта, поскольку оно нигде не может быть задействовано (контроллер не использует внедренную зависимость для создания принципала, но он использует HttpServletRequest).

Вам нужно изменить свой тест на что-то вроде следующего:

this.mockMvc.perform(get("/path").principal(principalMock)).andExpect(status().isOk());

Это будет работать, потому что фиктивный принципал будет передан MockHttpServletRequest, который фактически будет передан методу контроллера.

person geoand    schedule 16.05.2014