@TestPropertySource和UTF-8支持属性文件

时间:2016-08-05 12:42:21

标签: java spring encoding integration-testing spring-test

我正在为Spring应用程序进行集成测试,我希望能够使用UTF-8编码读取测试类中的属性文件。

现在,如果我想在我的属性中使用'ä'字符,我需要将其作为U \ 00E4放在我的属性文件中,因为默认属性文件是使用ISO-8859-1读取的。

如何配置我的测试应用程序上下文以读取UTF-8编码的属性文件?

1 个答案:

答案 0 :(得分:2)

<强> 1。从UTF-8文件生成.properties: 在构建基础结构(如maven)中,可以使用过滤器复制.properties文件,该过滤器将UTF-8源转义为构建目录中的ISO-8859-1:将ĉ转换为\u0109 }。

它的优点是不使用任何非标准功能,并且可以使用ResourceBundle。

<强> 2。一个好的属性编辑器: 先前解决方案的缺点是不再可以使用属性编辑器(并排使用不同的语言),因为良好的属性编辑器在后台显示Unicode字符和u-escapes。因此,在使用属性编辑器时,无需执行任何操作,并将文件保留为ISO-8859-1。

<强> 3。不是ResourceBundle,而是属性: 但是,属性类可以加载UTF-8。那么就不应该使用ResourceBundle。 在Spring中,这意味着,请不要使用ResourceBundleMessageSource,而应使用ReloadableResourceBundleMessageSource

<bean id="messageSource"
      class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value=".../test/classes/..."/>
    <property name="defaultEncoding" value="UTF-8"/>
    <property name="fileEncodings" value="UTF-8"/>
</bean>

(顺便说一句:ä\u00E4是一个ISO-8859-1字符,当编辑器设置为ISO-8859-1时,不需要u-escaping。所以尝试测试希腊语,西里尔语等。)