【发布时间】:2019-03-21 13:26:35
【问题描述】:
给定生产代码类:
@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”类型的合格 bean:预计至少有 1 个有资格作为自动装配候选者的 bean。依赖注释:{}
我认为这个错误是公平的。我已将测试注释为 WebMvcTest,我相信它已排除 @Component bean。这是有意和期望的(从我只想测试“Web 层”的角度来看,而不是整个上下文 - 碰巧我需要一个仅在控制器中相关/使用的组件)
因此,我的问题是:如何在 Web 测试的测试上下文中显式包含验证器之类的组件?
我的环境是javaversion "10.0.2" 2018-07-17,spring boot1.5.16.RELEASE。
【问题讨论】:
标签: spring-boot spring-boot-test spring-web spring-test-mvc spring-mvc-test