С учетом классов производственного кода:
@RestController
@RequiredArgsConstructor
public class MyController {
private final MyValidator validator;
// annotations relating to request mapping excluded for brevity
public void test(@Valid @RequestBody final MyParams params) {
// do stuff
}
@InitBinder
@SuppressWarnings("unused")
protected void initBinder(final WebDataBinder binder) {
binder.setValidator(validator);
}
}
и
@Component
@RequiredArgsConstructor
public class MyValidator implements Validator {
...
@Override
public void validate(final Object target, final Errors errors) {
// custom validation
}
}
и, наконец, тестовый код:
@RunWith(SpringRunner.class)
@WebMvcTest(MyController.class)
public class MyControllerTest {
// tests
}
Я сталкиваюсь с ошибкой:
NoSuchBeanDefinitionException: не доступен квалифицирующий компонент типа «MyValidator»: ожидается, что по крайней мере 1 компонент будет квалифицирован как кандидат для автоматической передачи.Аннотации зависимостей: {}
Я думаю, что ошибка достаточно справедлива.Я прокомментировал тест как WebMvcTest, который, как мне кажется, исключил @Component
bean-компоненты.Это намеренно и желательно (с точки зрения того, что я хочу протестировать только «веб-слой», а не весь контекст - просто так мне нужен компонент, связанный / используемый только в контроллерах)
Поэтому мой вопрос: как можно явно включить такой компонент, как валидатор, в контекст теста для веб-теста?
Моя среда - java version "10.0.2" 2018-07-17
, весенняя загрузка 1.5.16.RELEASE
.