我正在尝试为我的 Spring Boot 应用程序构建一组约束验证器。我想构建一些验证注释,例如@NotNull
. 顺便说一句:验证应该支持验证组。
所以我有一个带有验证注释的简单项目模型:
public class Item {
@NotNull(groups=OnCreate.class) // Not Null on validation group 'OnCreate'
private String mayNotBeNull;
// Constructors and getter/setter stuff.
}
然后我使用一个包装持久性逻辑已验证服务:
@Service
@Validated
public class MyService {
public Item create(@Validated(OnCreate.class) Item item) {
Item savedItem = repository.save(item);
return savedItem;
}
}
现在我想在不启动完整的 MVC 测试(这将启动所有 REST 控制器和我不需要的东西)的情况下测试此服务。
我开始编写我的测试:
@ContextConfiguration(classes = {
ItemRepository.class, MyService.class, LocalValidatorFactoryBean.class
})
@RunWith(SpringRunner.class)
public class PlantServiceTest {
@MockBean
private ItemRepository repository;
@Autowired
private MyService service;
@Autowired
private Validator validator;
@Test
public void shouldDetectValidationException() {
// ... building an invalid item
Item item = new Item();
item.setMayNotBeNull(null); // <- This causes the validation exception.
validator.validate(item, OnCreate.class);
}
@Test
public void shouldAlsoDetectValidationException() {
// ... building an invalid item
Item item = new Item();
item.setMayNotBeNull(null); // <- This should cause the validation exception.
service.create(item); // <- No validation error. Service is not validating.
}
}
方法shouldThrowValidationException
检测到验证错误,因为item中的字段值为null
.
方法shouldAlsoDetectValidationException
不检测验证错误。
我想我在配置上下文时错过了一些东西。验证逻辑不扩展服务对象。
如何配置测试,以便使用以下提供的验证逻辑来装饰自动装配的服务@Validated
?