我编写了一个测试,该测试应该测试我的类CasinoDto的验证,但是它们不起作用,断言失败。 导入应该是正确的,也许我写错了测试,但是我不知道错误在哪里。
CasinoDto类:
@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);
}
我已经检查了依赖性,它们应该是正确的。
答案 0 :(得分:3)
字段sales
有问题-您不能将@Size
用于数字类型。根据{{3}}:
受支持的类型为:
CharSequence(评估字符序列的长度)
集合(评估集合大小)
地图(评估地图大小)
数组(评估数组长度)
对于您的情况(使用Float),您需要使用另一组注释:
@NotNull
@DecimalMax("100000")
@DecimalMin("10")
private Float sales;
请注意,我还放置了@NotNull
,因为@DecimalMin
和@DecimalMax
认为可为空的元素是有效的(这是Bean验证API的常用方法)。
所有注释均来自软件包javax.validation.constraints
。