2010-11-21 67 views
2

我在某些流程中遇到了一些带有unicode字符的问题。所以我修正了流量并添加了测试。在Junit中比较unicode字符

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

的buyingOption.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

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

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

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

我Grodriguez同意,但想建议你改变你的默认编码为UTF-8忘记这种问题。

如何做到这一点?这取决于你的IDE。例如,在Eclipse中去窗口/首选项,然后输入“编码”,选择工作区,并更改编码设置为UTF-8

+0

好的,我想接下来是maven junit或编译器插件的一些配置。 – Roman 2010-11-21 12:31:07

+0

@Roman - 在您的Maven pom.xml中,您需要指定源文件的编码以匹配您的编辑器。这将确保在任何环境下进行一致的编译。 http://docs.codehaus.org/display/MAVENUSER/POM+Element+for+Source+File+Encoding – McDowell 2010-11-21 13:11:55

+0

McDowell:只要你一个人工作,或者至少在一个“受控”的环境中工作,改变你的默认编码就没有问题。然而,如果你是团队的一员,事情会变得更加困难,因为每个人都可能在不同的环境中工作。在源文件中使用Unicode转义是很简单的 - 文件编码无关紧要,无论使用什么编辑器/编译器/设置。 – Grodriguez 2010-11-21 20:10:30

2

我找到了解决办法是运行MVN测试

我修复此之前,更改默认编码问题是在运行之前设置ENV var JAVA_TOOL_OPTIONS

export JAVA_TOOL_OPTIONS="$JAVA_TOOL_OPTIONS -Dfile.encoding=UTF8"  
mvn test