比较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