У меня есть сервер сборки CruiseControl, на котором запущено большое количество проектов. На одном из них я недавно заметил, что в отчете о сборке присутствует только один из двух наборов тестов (но сбои в другом по-прежнему приводят к сбою сборки).
Дальнейшее расследование показало, что выходной XML-файл JUnit, созданный с помощью xmlformatter ant (который CruiseControl анализирует для создания отчетов о сборке), содержит случайные экземпляры символа кода ASCII 7 (BELL) внутри раздела CDATA, содержащего систему. -вне тестового случая. 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");