Сонар не может прочитать мой отчет CPPUnit
Я пытаюсь интегрировать контрольные примеры CPPUnit в мой сонар, но когда я помещаю отчет, возникает проблема с анализом.
# must be unique in a given SonarQube instance
sonar.projectKey=test
# this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 6.1.
sonar.projectName=test
sonar.projectVersion=1.0
sonar.sources=./core/
# Encoding of the source code. Default is default system encoding
sonar.sourceEncoding=UTF-8
sonar.language=c++
sonar.cxx.xunit.reportPath=cppunit-report.xml
sonar.cxx.rats.reportPath=rats-report.xml
sonar.cxx.cppcheck.reportPath=cppcheck-report.xml
Затем, вот код C++ для генерации моего отчета CPPUnit:
#include "PropositionalVariableTest.h"
CPPUNIT_TEST_SUITE_REGISTRATION( PropositionalVariableTest );
int main(int argc, char* argv[])
{
// informs test-listener about testresults
CPPUNIT_NS::TestResult testresult;
// register listener for collecting the test-results
CPPUNIT_NS::TestResultCollector collectedresults;
testresult.addListener (&collectedresults);
// register listener for per-test progress output
CPPUNIT_NS::BriefTestProgressListener progress;
testresult.addListener (&progress);
// insert test-suite at test-runner by registry
CPPUNIT_NS::TestRunner testrunner;
testrunner.addTest (CPPUNIT_NS::TestFactoryRegistry::getRegistry().makeTest ());
testrunner.run(testresult);
// output results in compiler-format
CPPUNIT_NS::CompilerOutputter compileroutputter(&collectedresults, std::cerr);
compileroutputter.write ();
// Output XML for Jenkins CPPunit plugin
ofstream xmlFileOut("../cppunit-report.xml");
XmlOutputter xmlOut(&collectedresults, xmlFileOut);
xmlOut.write();
// return 0 if tests were successful
return collectedresults.wasSuccessful() ? 0 : 1;
}
Затем вот отчет, сгенерированный этим кодом C++:
<?xml version="1.0" encoding='ISO-8859-1' standalone='yes' ?>
<TestRun>
<FailedTests></FailedTests>
<SuccessfulTests>
<Test id="1">
<Name>PropositionalVariableTest::testInitCorrect</Name>
</Test>
</SuccessfulTests>
<Statistics>
<Tests>1</Tests>
<FailuresTotal>0</FailuresTotal>
<Errors>0</Errors>
<Failures>0</Failures>
</Statistics>
</TestRun>
И, наконец, вот что отвечает SonarQube, когда читает этот отчет:
INFO: Sensor CxxXunitSensor
INFO: Scanner found '1' report files
INFO: Parser will parse '1' report files
INFO: Processing report '/.../cppunit-report.xml'
ERROR: Cannot feed the data into SonarQube, details: 'javax.xml.stream.XMLStreamException: ParseError at [row,col]:[16,1]
Message: Can not call 'getAttributeValue(): cursor does not point to a valid node (curr event [null]; cursor state CLOSED)'
INFO: ------------------------------------------------------------------------
INFO: EXECUTION FAILURE
INFO: ------------------------------------------------------------------------
INFO: Total time: 18.886s
INFO: Final Memory: 57M/364M
INFO: ------------------------------------------------------------------------
ERROR: Error during SonarQube Scanner execution
Мой вопрос заключается в том, что я совершенно не понимаю, почему это так... Я предполагаю, что речь идет о том, что этот отчет находится в XML 1.0...:/ Мне удалось без проблем интегрировать CPPCheck, RATS, также генерируя отчет в формате XML... Но я не управляю им с помощью CPPUnit
Заранее спасибо за помощь,
1 ответ
Решение
Как мы в конечном итоге обнаружили, XML должен был быть преобразован через некоторый XSL в другой формат, который представлен на сайте для плагина здесь: