比较Junit中的unicode字符

时间:2010-11-21 11:23:49

标签: java unicode junit

我的一些流程中的unicode字符在某些流程中遇到了问题。所以我修复了流程并添加了测试。

assertEquals("Björk", buyingOption.getArtist());

purchaseOption.getArtist()将返回与之相同的名称,这里是一个片段:

alt text

但junit将失败并显示以下消息:

junit.framework.ComparisonFailure: null 
Expected :Bj?rk
Actual   :Bj?rk
    at com.delver.update.system.AECSystemTest.basicOperationtsTest1(AECSystemTest.java:40)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

3 个答案:

答案 0 :(得分:3)

这可能是由于您的Java源文件使用的默认编码。在编译测试时,JUnit源代码中字符串文字中的ö可能正在转换为其他内容。

要避免这种情况,请在JUnit源代码中的字符串文字中使用Unicode转义符(\uxxxx):

assertEquals("Bj\u00F6rk", buyingOption.getArtist());

答案 1 :(得分:2)

我同意Grodriguez的意见,但我建议您将默认编码更改为UTF-8并忘记此类问题。

怎么做?这取决于您的IDE。例如,在Eclipse中转到Window / Preferences然后键入“encoding”,选择Workspace并将编码更改为UTf-8

答案 2 :(得分:2)

我发现解决方案是在运行mvn test之前更改默认编码

我对此问题的解决方法是在运行

之前设置ENV var JAVA_TOOL_OPTIONS
export JAVA_TOOL_OPTIONS="$JAVA_TOOL_OPTIONS -Dfile.encoding=UTF8"    
mvn test