我有一个测试用例(它实际上是一个集成测试),它使用包含斯堪的纳维亚字母的用户名登录。问题是当我从命令行运行Ant任务时,身份验证失败,因为编码不正确(它应该是UTF-8)。当我从Eclipse运行它时,测试运行正常,但不是从命令行运行。到目前为止,我已经尝试在Ant目标中告诉Ant正确的编码:
<target name="run_tests">
<junit fork="no" haltonfailure="no">
<jvmarg value="-Dfile.encoding=UTF-8"/>
<formatter type="xml" usefile="true" />
<classpath refid="test.classpath" />
<test name="com.company.integration.AllIntegrationTests" />
</junit>
</target>
并从命令行:
ant -D"file.encoding=UTF-8" run_tests
这些都不奏效。无论我做什么,测试仍然失败,测试报告说:
<property name="file.encoding" value="cp1252" />
就像我说的,如果我从Eclipse运行它,一切都很美妙。我还注意到,如果我通过将编码更改为ISO-8859-1来修改Eclipse中的运行配置,则测试会像预期的那样失败。所以很明显可以改变编码,但是你怎么做呢?
答案 0 :(得分:5)
您需要使用fork=yes
在单独的JVM中执行JUnit。
实际上,file.encoding
是从Ant的JVM继承的,并没有被你的jvmarg覆盖。
请参阅JUnit Task手册页中的jvmarg文档:
如果启用了fork,则需要额外的 参数可以传递给新VM 通过嵌套元素。