错误是因为没有由生成的输出文件
boost::test。需要使用正确的选项来调用测试脚本:
unit_test --report_level=detailed --report_format=xml 2> xunit.xml
不幸的是,boost :: test生成的XML输出文件的格式不正确(请参阅:SO转换boost ::
test日志和XUnit插件的Boost用户帮助)
JUnit插件期望XML测试输出采用以下格式:
<testsuites> <testsuite time="0.0000" timestamp="0.000" errors="0" failures="0" tests="13" hostname="localhost" name="my_test_suite"> <testcase id="65536" name="test_case_1" time="0.0000" /> <testcase id="65537" name="test_case_2" time="0.0000" /> <testcase id="65538" name="test_case_3" time="0.0000" /> </testsuite></testsuites>
有两种解决方法,例如:
- 通过以下方式转换XML输出
boost::test
- 直接自定义的输出,
boost::test
以便产生正确的格式。
我选择了选项2-如果您不是“ C / C ++”程序员,则可以让您尝试运行此方法的测试套件的作者,以下步骤应有助于使它们入门:
- 创建一个测试访问者以对测试运行的结果进行后期处理。
- 创建一个BOOST_GLOBAL_FIXTURE类,该类在其析构函数中浏览测试结果,以正确的格式输出测试结果。
- 在主测试模块中实例化夹具类。
即:
struct JUnitVisitor : public boost::unit_test::test_tree_visitor{ void visit( boost::unit_test::test_case const& tc ) { // output <testcase> xml in JUnit format } bool test_suite_start( boost::unit_test::test_suite const& ts ) { // output <testuite> xml in JUnit format } void test_suite_finish( boost::unit_test::test_suite const& ts ) { // output </testuite> xml in JUnit format }};struct MyJUnitOpFixture{ MyJUnitOpFixture() {} ~MyJUnitOpFixture() { // open results file /// output <testsuites> start tag // use a visitor to walk the test results tree JUnitVisitor visitor ( out ); boost::unit_test::traverse_test_tree( boost::unit_test::framework::master_test_suite(), visitor ); /// output </testsuites> end tag }}然后,通过添加以下内容在主测试文件中实例化全局夹具:
BOOST_GLOBAL_FIXTURE( MyJUnitOpFixture );



