我有一个测试类,其中我正在测试一个用例如用注释的域模型。@notnull
在我的测试课中,我首先获得验证器
private static Validator validator;
@BeforeClass
public static void setup() {
validator = Validation.buildDefaultValidatorFactory().getValidator();
}
后来我进行了一个Junit测试,我正在测试域模型(假设一个人(
Set<ConstraintViolation<Person>> violations = validator.validate( aPerson );
说,我想检索我执行的第一个违规消息:
String violationMessage = violations.iterator().next().getMessage()
我没有在@notnull注释上设置任何自定义违规消息。因此,Hibernate验证器将从Hibernate-Validator-JAR中的资源捆绑包中获取默认消息。我的道路看起来像这样:
hibernate-validator-5.3.5.Final.jar
- org
- hibernate
- validator
...
ResourceBundle 'Validation Messages'
在此资源捆绑中,有很多语言支持(英语,德语,法语,...(
示例
@notnull违规消息德语
javax.validation.constraints.NotNull.message = darf nicht null sein
@notnull违规消息英语
javax.validation.constraints.NotNull.message = may not be null
问题:
当我进行测试时,如何实施Hibernate验证器从资源捆绑包中选择特定语言来违反消息?现在,我收到的英语违规消息。但是,在另一台机器上。
GKR的答案是正确的。
可能有用的其他信息:如果您使用的是Maven和Surefire插件,则需要执行此类操作:
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
<configuration>
<forkMode>once</forkMode>
<argLine>-Duser.language=en</argLine>
</configuration>
</plugin>
摘要从参考文档凝结:
默认情况下,在捆绑包中查找消息时,将使用JVM的默认场所(Locale#getDefault(((。
无需触摸源代码或与您的OS/用户seetings提出小提琴,请尝试使用以下西班牙消息:
java -Duser.country=ES -Duser.language=es
Hibernate验证器5.1参考
您可以使用testframework的准备部分设置默认场所,这将影响您的违规消息的语言。如果您想期望英语,请添加
locale.setDefault(locale.english(;
在建造验证器工厂之前。在您的示例中可能看起来像这样:
private static Validator validator;
@BeforeClass
public static void setup() {
Locale.setDefault(Locale.ENGLISH);
validator = Validation.buildDefaultValidatorFactory().getValidator();
}