如果我在Eclipse CDT的简单单元测试中使用std :: cout,我会收到错误消息: “XML解析错误:prolog中不允许使用内容。”
但是,如果我删除带有“cout”消息的行,则测试运行正确。我打印到终端的调试消息似乎干扰了单元测试输出,因此Eclipse中的“C / C ++单元测试”窗口无法解析单元测试输出。
我的问题是,如果我的代码包含一些cout调试消息,如何在Eclipse的CDT中使用单元测试支持?单元测试输出是否可以发送到不同的位置(如临时文件),以便与打印到终端的cout / debug / log消息分开?
编辑: 例如,如果我使用http://www.boost.org/doc/libs/1_42_0/libs/test/doc/html/utf/user-guide/fixture/global.html中的示例25:
#define BOOST_TEST_MODULE example
#include <boost/test/included/unit_test.hpp>
#include <iostream>
//____________________________________________________________________________//
struct MyConfig {
MyConfig() { std::cout << "global setup\n"; }
~MyConfig() { std::cout << "global teardown\n"; }
};
//____________________________________________________________________________//
BOOST_GLOBAL_FIXTURE( MyConfig );
BOOST_AUTO_TEST_CASE( test_case )
{
BOOST_CHECK( true );
}
//____________________________________________________________________________//
然后我收到错误“XML解析错误:prolog中不允许内容。”在Eclipse中。这似乎是由Eclipse单元测试工具无法解析包含“全局设置”的输出引起的。所以问题是:在获取Eclipse的单元测试工具来解析消息并显示单元测试结果时,如何继续使用此示例和打印的调试消息?
答案 0 :(得分:4)
Eclipse CDT&amp; amp; Boost.Test是通过std :: cout实现的,所以你的代码不应该在那里输出任何东西。你应该使用BOOST_MESSAGE或者打印到std :: cerr。
不幸的是,它是Boost.Test的限制,应该扩展它以实现您想要的功能。
答案 1 :(得分:0)
我克服了类似的问题,XML解析错误干扰了测试运行,有条件地将输出包装到带有CDATA标记的std :: cout进行单元测试构建:
#if defined(WRAP_XML_CDATA)
output << "<![CDATA[";
#endif
...
#if defined(WRAP_XML_CDATA)
output << "]]>";
#endif
这会阻止程序的输出被解析为XML。