У меня есть конечные точки API, для которых требуется, чтобы пользователь занимал определенную роль. Поэтому в некоторых из моих тестов я пытаюсь достичь этих конечных точек и ожидаю ошибки 401, однако получаю 200. Я использую MockMvc для выполнения вызовов.
Ниже приведены некоторые фрагменты класса контроллера с одним из методов, которые я тестирую:
@RestController
public class MyController {
@GetMapping("/getcurrentuser")
public User getCurrent() {
...code
}
}
Ниже приведен мой тестовый класс (показывающий только соответствующий тестовый метод и переменные):
@RunWith(SpringRunner.class)
@WebMvcTest(MyController.class)
@ContextConfiguration(classes = MyController.class)
public class MyControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
public void testGetCurrentFailedDueToIncorrectRole() throws Exception {
mockMvc.perform(get("/api/getcurrentuser")
.with(user(USER_NAME).password(PASSWORD)))
.andExpect(status().isUnauthorized());
}
}
У меня также есть класс конфигурации безопасности Spring, однако я не уверен, вводится ли он в контекст в этом тесте (извините, я все еще новичок в Spring и модульном тестировании). Внутри этого класса у меня есть следующая строка кода:
.antMatchers("/api/**").hasAnyRole("ADMIN", "READ_ONLY")
Тест показал, что ранее он не удался, так как я сказал, что получаю 200. Сейчас я думаю, что я делаю что-то не так в конфигурации этого теста, и поэтому роли не учитываются. Или, может быть, я не понимаю, как работает часть ".with".
Приветствуется любая форма помощи.
Если вы используете Spring Boot, вы можете попробовать использовать @SpringBootTest и @AutoConfigureMockMvc.
@WebMvcTest не использует ваши классы конфигурации. Это означает, что ваша конфигурация безопасности не будет использоваться. Но я думаю, твоя проблема не в этом.