2010-11-12 46 views
0

使用Netbeans 6.9.1我的单元测试通过没有问题。使用junit(4.8.2,它似乎与Netbeans使用的版本相同),测试在命令行上失败。蚂蚁JUnit失败与法国千位分隔符

失败一个使用此线做:

assertEquals("x doit être >= 10 et < 100, était la suivante: 1 000", messages_fr.between("x", 10, 100, 1000)); 

在命令行上的消息显示为:

X度特├¬tre> = 10等< 100,├⌐tait la suivante:1á000

我对正在发生的事情不知所措。我知道千位分隔符不是一个空格,而是0XA0,没有问题,但是Netbeans和命令行有分歧的事实是一个真正的问题。

我正在使用ant 1.8.1,它也是与Netbeans相同的版本。它发生在OS X(10.6.5)和Windows 7上。我仍然需要检查Ubuntu 10.10。

任何想法,为什么它在Netbeans工作,但不是在蚂蚁命令行?

+1

值得检查Ant使用的语言环境和编码设置是否与Netbeans使用的设置一致。你的'之间'方法虽然做了什么? – 2010-11-12 07:25:04

回答

2

请注意输出中的不一致性:êé看起来像显示为CP437的UTF-8,而无间断空间看起来像显示为CP437的Windows-1252。

让我们放下控制台编码(CP437)与系统编码(Windows-1252)不匹配的事实。然后,我假设无间断空间正确表示,因为它来自运行时库。这意味着表示消息的UTF-8是一个错误。您的消息的模板可能以UTF-8格式存储,但会作为Windows-1252加载。如果该模板存储在代码中,则需要将编译器编码设置为UTF-8。

+0

事实证明,我没有设置junit或javac编码为utf-8。花了我一段时间来追查这个问题(我改变了javac的源代码,但不是单元测试)。感谢您指点我正确的方向......我从来不会有,但我必须通过编码到javac。 – TofuBeer 2010-11-14 18:54:05

+0

如何将javac设置为utf-8编码?谢谢。 – Glide 2011-02-07 19:43:15

1

我认为你的问题是编码。您可以尝试更改Java类的编码(从ISO到UTF或反之亦然)。

如果这不起作用,您可以尝试配置Ant以使用Netbeans所使用的相同编码。

如果这不起作用,您可以尝试编写一种方法,将消息转换为另一个消息而不需要特殊字符。

在西班牙,我们遇到了同样的问题,很多时候我们都写了没有特殊字符的字符串(不是最好的解决方案,但是它的工作原理)。