У меня есть приложение Spring, и я строю JUnit
тестов для тестирования определенного Controller
.Испытайте пружинный контроллер с JUnit, который зависит от весенней безопасности
Проблема заключается в том, что внутри Controller
я называю этот код:
final Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
final String userName = authentication.getName();
Другими словами, мне нужно проверить подлинность перед вызовом этой Controller
. Я написал тест JUnit
с этим кодом:
private MockMvc mockMvc;
@Test
public void getPageTest() throws Exception{
final ProcessFileController controller = new ProcessFileController();
mockMvc = standaloneSetup(controller).build();
mockMvc.perform(get(URI.create("/processFile.html")).sessionAttr("freeTrialEmailAddress", "")).andExpect(view().name("processFile"));
}
И когда я бегу он дает мне NullPointerException
прямо на final String userName = authentication.getName();
, потому что мой authentication
является null
, так как я не вошёл.
Вопрос: Есть ли способ издеваться над аутентификацией? Все идеи приветствуются.
спасибо.
Почему вы делаете это вручную, вместо того, чтобы использовать '@ AuthenticationPrincipal'? – chrylis
chrylis, архитектура не была разработана для использования '@ AuthenticationPrincipal', мне нужна идея, способ справиться с этим с текущей архитектурой, которую я имею прямо сейчас. Спасибо за ваш ответ. –