我写了一个测试,应该测试我的类 CasinoDto 的验证,但它们不起作用,断言失败。 导入应该是正确的,也许我写了一个错误的测试,但我不知道错误在哪里。
赌场Dto类:
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Data
public class CasinoDto {
@Id
private Long casinoId;
@Size(min = 10, max=100000)
private Float sales;
private String country;
private String place;
@NotNull
private String street;
@NotNull
private String houseNumber;
}
不起作用的测试:
private CasinoDto casinoDto;
private static Validator validator;
private static ValidatorFactory validatorFactory;
@BeforeAll
public static void createValidator(){
validatorFactory = Validation.buildDefaultValidatorFactory();
validator = validatorFactory.getValidator();
}
@BeforeEach
void setCasinoDto(){
casinoDto = CasinoDto.builder()
.casinoId(1L)
.country("yes")
.houseNumber("12")
.place("mareo")
.sales(20000f)
.street("irgendwo")
.build();
}
@AfterEach
void testViolation(){
Set<ConstraintViolation<CasinoDto>> violations = validator.validate(casinoDto);
Assertions.assertFalse(violations.isEmpty());
}
@Test
void testNotNull(){
casinoDto.setStreet(null);
}
我已经检查了依赖项,它们应该是正确的。
字段sales
存在问题 - 不能将@Size
与数字类型一起使用。根据文档:
支持的类型包括:
字符序列(计算字符序列的长度(
集合(评估集合大小(
地图(评估地图大小(
数组(计算数组长度(
在您的情况下(使用 Float(,您需要使用一组不同的注释:
@NotNull
@DecimalMax("100000")
@DecimalMin("10")
private Float sales;
请注意,我也放置了@NotNull
,因为@DecimalMin
和@DecimalMax
认为可为空的元素是有效的(这是 Bean 验证 API 的常用方法(。
所有注释都来自包javax.validation.constraints
。