3

我似乎无法让自定义验证消息起作用。首先,我使用自定义验证器尝试了它,但它在那里不起作用,所以按照这个示例,我尝试使用带有自定义消息键的内置约束,但没有运气。

这是我针对该问题的 JUnit4 测试用例:

public class PatternMessageTest {
    private static Validator validator;

    @BeforeClass
    public static void setUp() {
        ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
        validator = factory.getValidator();
    }

    @Test
    public void testIsValid_invalid() {
        StringHolder stringHolder = new StringHolder();
        stringHolder.setSomeString("not digits");

        Set<ConstraintViolation<StringHolder>> constraintViolations = validator.validate(stringHolder);
            assertEquals(1, constraintViolations.size());
            assertEquals(
                "Some validation message", 
                constraintViolations.iterator().next().getMessage());
    }

    private class StringHolder {
        @Valid
        @Pattern(regexp="\\d+", message="{mymessagekey}")
        private String _someString;

        // _someString getter, setter
    }

}

这是 的内容ValidationMessages.properties,它位于我的目录的根test目录中:

mymessagekey=Some validation message

测试输出为:

org.junit.ComparisonFailure: expected:<[Some validation message]> but was:<[{mymessagekey}]>

所以显然没有找到消息密钥。我究竟做错了什么?

相关类路径:

  • 验证-api-1.0.0.GA.jar
  • hibernate-validator-4.1.0.Final.jar
  • hibernate-validator-annotation-processor-4.1.0.Final.jar

在开始讨论这样一个简单的测试用例之前,我正在向 Spring MVC 应用程序添加验证,并且行为是相同的:我不断获取带有大括号的密钥作为验证返回的消息。

4

0 回答 0