我有一个测试类,我正在测试一个用例如注释的域模型。 @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 Validator从资源包中为违规消息选择特定语言?现在,我收到英语违规消息。但是,在德国的另一台机器上。
答案 0 :(得分:4)
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>
答案 1 :(得分:1)
摘要摘自参考文档:
默认情况下,查找捆绑包中的邮件时将使用JVM的默认语言环境(Locale#getDefault())。
如果没有触及源代码或操作您的操作系统/用户节目,请尝试使用以获取西班牙语消息:
java -Duser.country=ES -Duser.language=es
答案 2 :(得分:0)
您可以使用测试框架的准备部分来设置默认区域设置,这将影响您的违规消息的语言。如果您想使用英语,请添加
<块引用>Locale.setDefault(Locale.ENGLISH);
在构建您的验证器工厂之前。在您的示例中可能如下所示:
private static Validator validator;
@BeforeClass
public static void setup() {
Locale.setDefault(Locale.ENGLISH);
validator = Validation.buildDefaultValidatorFactory().getValidator();
}