Я использую Spring Security и сталкиваюсь с проблемой написания модульного тестового примера (использующего MockMvc) для контроллера.
У меня есть метод в моем контроллере, который выглядит примерно так:
@GetMapping
public ResponseEntity<User> getUser(@AuthenticationPrincipal User activeUser){
String userEmail = activeUser.getEmail();
return userService.getUser(userEmail);
}
Я получаю ошибку 500 с этим.
Еще один вариант для контроллера, который я пробовал, - это работает на Postman / Curl:
@GetMapping
public ResponseEntity<User> getUser(OAuth2Authentication authentication){
String userEmail = (String) authentication.getUserAuthentication().getPrincipal();
return userService.getUser(userEmail);
}
Мой сервис выглядит так:
public ResponseEntity<User> getUser(String email) {
return userRepository.findByEmail(email)
.map(record -> ResponseEntity.ok().body(record))
.orElse(ResponseEntity.notFound().build());
}
В моем модульном тесте для этого метода контроллера у меня есть:
@Test
@WithMockUser(username = "1", password = "pwd", roles = "USER")
public void controller_should_get_user() throws Exception {
when(userService.getUser("1")).thenReturn(new ResponseEntity(userMock, HttpStatus.OK));
this.mockMvc.perform(MockMvcRequestBuilders.get("/api/user/")).andExpect(status().isOk());
}
Я получаю следующую ошибку:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException
at com.timecloud.user.controller.UserControllerTest.controller_should_get_user(UserControllerTest.java:60)
Как следуетЯ прохожу прохождение или издевательство над пользователем с текущей аутентификацией?Благодаря.