由于自定义约束验证器,验证器单元测试失败

地心

我正在为我的 DTO 的约束验证器编写测试。它们适用于每个 DTO,除了使用自定义编写的EmailUniqueConstraintValidator. 发生此异常:

javax.validation.ValidationException: HV000028: Unexpected exception during isValid call.

    at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateSingleConstraint(ConstraintTree.java:177)
    at org.hibernate.validator.internal.engine.constraintvalidation.SimpleConstraintTree.validateConstraints(SimpleConstraintTree.java:68)
    at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateConstraints(ConstraintTree.java:73)
    at org.hibernate.validator.internal.metadata.core.MetaConstraint.doValidateConstraint(MetaConstraint.java:127)
    at org.hibernate.validator.internal.metadata.core.MetaConstraint.validateConstraint(MetaConstraint.java:120)
    at org.hibernate.validator.internal.engine.ValidatorImpl.validateMetaConstraint(ValidatorImpl.java:533)
    at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForSingleDefaultGroupElement(ValidatorImpl.java:496)
    at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForDefaultGroup(ValidatorImpl.java:465)
    at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:430)
    at org.hibernate.validator.internal.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:380)
    at org.hibernate.validator.internal.engine.ValidatorImpl.validate(ValidatorImpl.java:169)
    at be.ambrassade.jeugdlink.model.request.UserCreateRequestTest.passwordSizeTooShortOrLongReturnsValidationError(UserCreateRequestTest.java:71)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:532)
    at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:115)
    at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:171)
    at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:72)
    at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:167)
    at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:114)
    at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:59)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$4(NodeTestTask.java:108)
    at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:72)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:98)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:74)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1540)
    at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$4(NodeTestTask.java:112)
    at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:72)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:98)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:74)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1540)
    at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$4(NodeTestTask.java:112)
    at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:72)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:98)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:74)
    at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32)
    at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
    at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51)
    at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:220)
    at org.junit.platform.launcher.core.DefaultLauncher.lambda$execute$6(DefaultLauncher.java:188)
    at org.junit.platform.launcher.core.DefaultLauncher.withInterceptedStreams(DefaultLauncher.java:202)
    at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:181)
    at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:128)
    at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:69)
    at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: java.lang.NullPointerException
    at be.ambrassade.jeugdlink.validation.EmailUniqueConstraintValidator.isValid(EmailUniqueConstraintValidator.java:33)
    at be.ambrassade.jeugdlink.validation.EmailUniqueConstraintValidator.isValid(EmailUniqueConstraintValidator.java:21)
    at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateSingleConstraint(ConstraintTree.java:171)
    ... 50 more

这是验证器:

import be.ambrassade.jeugdlink.repo.UserRepository;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

public class EmailUniqueConstraintValidator implements ConstraintValidator<EmailUnique, String> {

    private UserRepository userRepository;


    public EmailUniqueConstraintValidator(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        return value == null || !userRepository.existsByEmail(value);
    }
}

它没有公共无参数构造函数,但由于存储库依赖性,添加一个也不能解决问题。

由于该自定义验证器的问题,该 DTO 的验证测试均无效。我该如何解决这个问题?

马修

如果您再次阅读堆栈跟踪,您会注意到异常原因是NullPointerException

Caused by: java.lang.NullPointerException
    at be.ambrassade.jeugdlink.validation.EmailUniqueConstraintValidator.isValid(EmailUniqueConstraintValidator.java:33)

所以这个问题的解决方法非常简单,确保userRepositoryisValid方法中访问时字段值不为空

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

单元测试验证器约束

来自分类Dev

Spring Validation 中的单元测试自定义验证器

来自分类Dev

Java约束验证器-如何从我的自定义验证器调用默认约束验证器?

来自分类Dev

自定义验证器属性在单元测试中有效,但在 web api 控制器中无效?

来自分类Dev

不同类型的自定义约束(验证器)

来自分类Dev

验证单元测试失败

来自分类Dev

使用Minitest测试自定义验证器

来自分类Dev

为自定义验证器创建测试

来自分类Dev

测试指令用作通用自定义验证器

来自分类Dev

AngularJS自定义验证指令单元测试:模型值未定义

来自分类Dev

使用symfony2.3进行单元测试验证器约束

来自分类Dev

使用symfony2.3进行单元测试验证器约束

来自分类Dev

Laravel单元测试因自定义属性而失败

来自分类Dev

基于休眠验证器中的验证失败,自定义验证器是否可以有多个消息?

来自分类Dev

ActiveModel验证自定义设置器

来自分类Dev

JAXB自定义验证器

来自分类Dev

WTForm自定义内联验证器

来自分类Dev

角形自定义验证器

来自分类Dev

Spring MVC自定义验证器

来自分类Dev

Proptypes 自定义验证器与 Flow

来自分类Dev

带参数的自定义验证器

来自分类Dev

如何模拟验证器进行单元测试

来自分类Dev

单元测试属性数据批注验证器

来自分类Dev

自定义验证失败

来自分类Dev

如何使用Java对自定义日期反序列化器进行单元测试

来自分类Dev

如何对自定义上下文管理器进行单元测试?

来自分类Dev

对自定义STL兼容的容器和迭代器进行单元测试

来自分类Dev

如何使用Java对自定义日期反序列化器进行单元测试

来自分类Dev

Spring Batch:对自定义项目阅读器进行单元测试

Related 相关文章

热门标签

归档