【发布时间】:2022-10-23 23:46:07
【问题描述】:
我需要对使用某些验证所需的@Inject 的自定义 ConstraintValidator 进行验证,但就像这个示例 https://quarkus.io/guides/validation
@ApplicationScoped
public class MyConstraintValidator implements ConstraintValidator<MyConstraint, String> {
@Inject
MyService service;
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
if (value == null) {
return true;
}
return service.validate(value);
}
}
当我运行应用程序时,我可以看到这是正确的验证,但我正在尝试使用 mockito 进行单元测试,我无法模拟对象始终为空。
在 quarkus 的示例中,单元测试仅用于集成。
这是我的实现
@ApplicationScoped
public class MyConstraintValidator implements ConstraintValidator<MyConstraint, String> {
@Inject
BookService service;
@ConfigProperty(name = "my.property")
int myLimit;
public MyConstraintValidator(BookService service) {
this.service = service;
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
System.out.println("myLimit property: " + myLimit);
int limit = Integer.parseInt(value);
if (limit < myLimit) {
return service.validate(value);
} else {
context.disableDefaultConstraintViolation();
context.buildConstraintViolationWithTemplate(NAME_EMPTY).addConstraintViolation();
return false;
}
}
}
和单元测试
@Test
void testAmountValidationWithContext() {
BookRequest bookRequest = new BookRequest();
bookRequest.setTitle("my title");
bookRequest.setAuthor("my Author");
bookRequest.setPages(2L);
bookRequest.setAmount("11");
//when:
myConstraintValidator = new MyConstraintValidator(service);
Mockito.when(service.validate(anyString())).thenReturn(true);
//then:
// boolean result = myConstraintValidator.isValid("11", context);
Set<ConstraintViolation<BookRequest>> violations = validator.validate(bookRequest);
// verify that the context is called with the correct argument
Mockito.verify(context).buildConstraintViolationWithTemplate(NAME_EMPTY);
}
注释的行仅用于测试 isValid 方法并且工作正常。 但我需要测试@NotNull、@Pattern 的其他验证。 在此验证中, isValid() 也运行,这是我的问题,属性和 @Inject 为空。
我已经在互联网上看到了几个例子,但不起作用,几乎是春天,但我需要在 quarkus 上进行自定义验证。
如何使用 quarkus 实现自定义 ConstraintValidator 单元测试? 有没有人有这个工作的例子?
【问题讨论】:
标签: constraints quarkus inject