Пишу модуль для контроллера с spting boot @WebMvcTest
.
Используя @WebMvcTest
, я смогу внедрить объект MockMvc
, как показано ниже: -
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {TestConfig.class})
@WebMvcTest
class MyControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
public void my_controller_test() throws Exception {
mockMvc.perform(post("/create-user"))
.andExpect(status().isCreated());
}
}
В контроллере я ввожу аргумент Principal
, используя spring HandlerMethodArgumentResolver
. Пожалуйста, сообщите мне, как я могу написать модульный тест с MockMvc
, чтобы я мог внедрить фиктивный объект Principal
в качестве аргумента в методе контроллера.
Раздел Автоматически настроенные тесты Spring MVC поясняет, что тест с аннотацией @WebMvcTest
будет сканировать bean-компоненты HandlerMethodArgumentResolver
. Итак, я создал bean-компонент, который расширяет HandlerMethodArgumentResolver
и возвращает фиктивный объект Principal
, как показано ниже.
@Component
public class MockPrincipalArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.getParameterType().equals(Principal.class);
}
@Override
public Object resolveArgument(MethodParameter parameter...) throws Exception {
return new MockPrincipal();
}
}
Но все же аргумент MockPrincipal
не передается методу контроллера.
Весенняя загрузочная версия: - 1.4.5.RELEASE
HandlerMethodArgumentResolver
.post(/your-url).principal(new MockPrincipal())
. - person M. Deinum   schedule 17.07.2017