我的一些流程中的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)
答案 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_OPTIONSexport JAVA_TOOL_OPTIONS="$JAVA_TOOL_OPTIONS -Dfile.encoding=UTF8"
mvn test