У меня есть такие тесты:
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_CLASS)
@ActiveProfiles("test")
public class MyTests {
@Autowired
private TestRestTemplate restTemplate;
....
В тестах я отключил аутентификацию/авторизацию
Но в коде я использую следующее:
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
Но это причина, почему тесты терпят неудачу.
Как я могу издеваться над своими тестами?
P.S.
Этот не работает:
@Test
public void testUpdateWithoutNameAndEmail() {
Authentication authentication = Mockito.mock(Authentication.class);
SecurityContext securityContext = Mockito.mock(SecurityContext.class);
Mockito.when(securityContext.getAuthentication()).thenReturn(authentication);
SecurityContextHolder.setContext(securityContext);
Mockito.when(authentication.getName()).thenReturn("aName");
restTemplate.exchange(..
SecurityContextHolder.getContext().getAuthentication()
возвращает ноль в коде
и этот тоже:
@Autowired
private TestRestTemplate restTemplate;
@Test
@WithMockUser(username = "aUser", roles = { "ADMIN" })
public void testUpdateWithoutNameAndEmail() {
...
SecurityContextHolder.getContext().setAuthentication()
и передать ему какой-нибудь макетAuthentication
(или реальный экземпляр, если хотите) - person   schedule 11.09.2017@SpringBootTest
, TestRestTemplate автоматически доступен и может быть@Autowired
добавлен в ваш тест. Если вам нужны настройки (например, для добавления дополнительных конвертеров сообщений), используйте RestTemplateBuilder@Bean
. Итак, создайте TestRestTemplare с некоторой аутентификацией (имя пользователя/пароль). - person   schedule 11.09.2017