Dac*_*ein 2 java junit hibernate hibernate-validator
我有一个测试类,我在其中测试用例如@NotNull注释的域模型
在我的测试课中,我首先要获得验证器
private static Validator validator;
@BeforeClass
public static void setup() {
validator = Validation.buildDefaultValidatorFactory().getValidator();
}
Run Code Online (Sandbox Code Playgroud)
后来我有一个JUnit测试,我在其中测试领域模型(比如说一个人)
Set<ConstraintViolation<Person>> violations = validator.validate( aPerson );
Run Code Online (Sandbox Code Playgroud)
可以说,我想检索我做的第一条违规消息:
String violationMessage = violations.iterator().next().getMessage()
Run Code Online (Sandbox Code Playgroud)
我尚未在@NotNull批注上设置任何自定义违规消息。因此,休眠验证器将从hibernate-validator-jar中的资源包中提取默认消息。我的路径如下所示:
hibernate-validator-5.3.5.Final.jar
- org
- hibernate
- validator
...
ResourceBundle 'Validation Messages'
Run Code Online (Sandbox Code Playgroud)
在此资源包中,支持多种语言(英语,德语,法语,...)
例
@NotNull违规消息(德语)
javax.validation.constraints.NotNull.message = darf nicht null sein
Run Code Online (Sandbox Code Playgroud)
英文@NotNull违规消息
javax.validation.constraints.NotNull.message = may not be null
Run Code Online (Sandbox Code Playgroud)
题:
在测试时,如何强制Hibernate Validator从资源包中为违规消息选择特定的语言?现在,我收到英语违规消息。但是,在另一台机器上德语。
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>
Run Code Online (Sandbox Code Playgroud)
从参考文档中总结出来的摘要:
默认情况下,在包中查找消息时将使用 JVM 的默认区域设置 (Locale#getDefault())。
在不接触源代码或摆弄操作系统/用户设置的情况下,尝试使用西班牙语消息:
java -Duser.country=ES -Duser.language=es
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1265 次 |
| 最近记录: |