1

Eclipse CDT の単純な単体テストで std::cout を使用すると、「XML parse error: Content is not allowed in prolog.」というエラー メッセージが表示されます。

ただし、「cout」メッセージのある行を削除すると、テストは正しく実行されます。端末に出力しているデバッグ メッセージが単体テストの出力に干渉しているようで、Eclipse の [C/C++ Unit Test] ウィンドウが単体テストの出力を解析できないようです。

私の質問は、コードに 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 parse error: Content is not allowed in prolog.」というエラーが表示されます。エクリプスで。これは、Eclipse Unit Test ツールが「global setup」を含む出力を解析できないことが原因のようです。問題は、Eclipse の単体テスト ツールでメッセージを解析して単体テストの結果を表示しながら、出力されたデバッグ メッセージでこの例を使用し続けるにはどうすればよいかということです。

4

2 に答える 2

4

Eclipse CDT と Boost.Test の間の通信は std::cout を介して実装されるため、コードはそこに何も出力しないはずです。代わりに BOOST_MESSAGE または print to std::cerr を使用する必要があります。

残念ながら、これは Boost.Test の制限であり、必要な機能を実装するには拡張する必要があります。

于 2013-03-24T09:46:14.990 に答える
0

単体テスト ビルドの CDATA タグを使用して出力を条件付きで std::cout にラップすることで、テストの実行に干渉する XML 解析エラーに関する同様の問題を克服しました。

#if defined(WRAP_XML_CDATA)
  output << "<![CDATA[";
#endif

...

#if defined(WRAP_XML_CDATA)
  output << "]]>";
#endif

これにより、プログラムの出力が XML として解析されなくなります。

于 2013-09-13T11:37:59.263 に答える