代码之家  ›  专栏  ›  技术社区  ›  Michael Borgwardt

JUnit Log Making CruiseControl Barf中的假^G(Bell)字符

  •  2
  • Michael Borgwardt  · 技术社区  · 15 年前

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

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

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

    而且,不管测试用例向其标准输出写入什么内容,XML格式化程序都不应该生成有效的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");
    
    1 回复  |  直到 15 年前
        1
  •  1
  •   Michael Borgwardt    15 年前

    我现在发现有问题的字符是测试stdout流的一部分,由 beep() 方法 sun.awt.HeadlessToolkit ,即 Toolkit 在生成服务器上的情况下,当 java.awt.headless 系统属性设置为 true .

    在我看来,这首先是Ant的用于junit日志的xmlFormatter中的一个bug,不管stdout流中是什么,它都应该产生有效的xml输出。

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