2

我有一个运行大量项目的 CruiseControl 构建服务器。在其中一个上,我最近注意到构建报告中只有两个测试套件中的一个(但另一个中的故障仍然会导致构建失败)。

进一步的调查表明,由 ant 的 xmlformatter(CruiseControl 解析以生成构建报告)生成的 JUnit 的 XML 输出文件在包含测试用例的系统输出的 CDATA 部分中偶尔包含 ASCII 代码 7 (BELL) 字符的实例。Cruiscontrol 显然无法处理此问题,并且 xmllint 还认为这些字符在 CDATA 部分中是非法的。

不幸的是,我找不到任何能写出这些字符的东西。它们出现在特定日志输出行的开头,但并非总是如此(尽管日志代码总是打印相同的字符串文字)。

无论测试用例向其标准输出写入什么内容,xmlformatter 都不应该生成有效的 XML 吗?

有没有人遇到过类似的问题?

这是 XML 日志文件的相关部分的样子(匿名,因为这是一个公司应用程序):

  <testcase classname="Testclass" name="testMethod" time="0.0020"></testcase>
  <system-out><![CDATA[15.10.09 16:49:41.161 (MainUIClass): Starte UI initialize
...
^G15.10.09 16:49:58.881 (SubUiClass): Starte UI initialize
15.10.09 16:49:58.881 (SubUiClass): UI initialize beendet
^G15.10.09 16:49:59.264 (SubUiClass): Starte UI initialize
15.10.09 16:49:59.264 (SubUiClass): UI initialize beendet

这是产生该日志输出的代码:

SystemProperties.getLogger().logInfo(getClass(), "Starte UI initialize");
...
SystemProperties.getLogger().logInfo(getClass(), "UI initialize beendet");
4

1 回答 1

1

我现在发现有问题的字符是测试的标准输出流的一部分,并且是由 的beep()方法产生的sun.awt.HeadlessToolkit,即Toolkit在构建服务器上的情况下使用的实现,java.awt.headless系统属性设置为true

我似乎很清楚,这首先是 ant 用于 JUnit 日志的 xmlformatter 中的一个错误,无论标准输出流中有什么,它(我会说)都应该产生有效的 XML 输出。

编辑我使用的是旧版本的 ant;当前版本(1.7.1)没有这个问题。

于 2009-10-16T16:40:02.750 回答