比较Junit中的unicode字符

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

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

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

替代文字

但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) 

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

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

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

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

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

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

我对此问题的解决方法是在运行之前设置ENV var JAVA_TOOL_OPTIONS

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