Я пишу юнит-тесты для проекта, сконфигурированного oauth2 для обеспечения безопасности Spring. Oauth2 настроен для потока учетных данных пароля владельца ресурса.
Я попытался отключить защиту, предоставив (secure = false) аннотацию WebMvcTest, которая работает нормально, однако я хотел бы написать модульные тесты с включенной защитой.
Модульный тест выглядит примерно так:
@RunWith(SpringRunner.class)
@WebMvcTest(UserController.class)
class UserControllerTest {
@Autowired
MockMvc mockMvc;
@Test
void test() {
RequestBuilder = MockMvcRequestBuilders.
get("/api/users/").accept(MediaType.APPLICATION_JSON);
MvcResult mvcResult = mockMvc.perform(requestBuilder).andReturn();
assertEquals("Some string", mvcResult.response().contentAsString());
}
}
Обратите внимание, что / api / ** настроен для аутентификации конечной точки сервером ресурсов.
Теперь, согласно моему пониманию, аннотация @WebMvcTest также автоматически связывает класс, помеченный @EnableWebSecurity, который, в свою очередь, автоматически связывает bean-компонент соответствия запросов с использованием инжектора конструктора следующим образом:
@Configuration
@EnableWebSecurity
class WebSecurityConfiguration extends WebSecurityConfigurerAdapter{
@Qualifier("resourceServerRequestMatcher")
@Autowired
private RequestMatcher requestMatcher;
public WebSecurityConfiguration(RequestMatcher requestMatcher){
this.requestMatcher = requestMatcher;
}
}
Итак, когда я запускаю модульный тест, я получаю следующее исключение.
Consider defining a bean of type 'org.springframework.security.web.util.matcher.RequestMatcher' in your configuration.
Я понимаю, о чем просит исключение, я немного запутался в том, как это должно быть сделано в классе юнит-теста.