2011-12-18 11 views
4

ブーストユニットテストフレームワークを使って書かれた単体テストの実行を自動化するためのスクリプトを書いています。私は、すべてのテストのサブセットの選択とその後の実行を可能にする機能を追加したいと思います。私はrun_test引数を使用してテストのサブセットを実行できますが、コンパイルされたバイナリにあるすべてのテスト、つまりrun_testに渡すことができるすべての引数値をリストする方法を見つけることができません。使用可能なすべてのテストを抽出する方法はありますか、またはカスタムテストランナーを作成する必要がありますか?もしそうなら、どこから始めるのですか?ブーストユニットテスト - 利用可能なテストのリスト

+0

開始可能なコマンドライン['list_content'](http://www.boost.org/doc/libs/1_66_0/libs/test/doc/html/boost_test/utf_reference/rt_param_reference/list_content.html)を参照してください。ブースト1.59 + – Raffi

答えて

4

boost :: testの内部用のドキュメントは、少し欠けている可能性があり、すべてが利用可能であると述べています。

boost :: testヘッダーファイル、特にtest_suiteとtest_unitクラスを見てください。 traverse_test_treeという関数があり、登録されたテストを実行するために使用できます。

以下

うまくいけば、それは開始あなたの頭を与えるだろう、それが出力する各テストの結果をtraverse_test_treeを使用して、私は特定の形式で出力テスト結果に書かれているいくつかのsamleコードです....

/** 
* Boost test output formatter to output test results in a format that 
* mimics cpp unit. 
*/ 
class CppUnitOpFormatter : public boost::unit_test::output::plain_report_formatter 
{ 
public: 
    /** 
    * Overidden to provide output that is compatible with cpp unit. 
    * 
    * \param tu the top level test unit. 
    * \param ostr the output stream 
    */ 
    virtual void do_confirmation_report(boost::unit_test::test_unit const& tu, 
             std::ostream& ostr); 
}; 


class CppUnitSuiteVisitor : public test_tree_visitor 
{ 
public: 
    explicit CppUnitSuiteVisitor(const string& name) : name_(name) 
    {} 

    virtual void visit(const test_case& tu) 
    { 
     const test_results& tr = results_collector.results(tu.p_id); 
     cout << name_ << "::" << tu.p_name << " : " << (tr.passed() ? "OK\n" : "FAIL\n"); 
    } 
private: 
    string name_; 
}; 

// ---------------------------------------------------------------------------| 
void CppUnitOpFormatter::do_confirmation_report( 
     test_unit const& tu, std::ostream& ostr) 
{ 
    using boost::unit_test::output::plain_report_formatter; 

    CppUnitSuiteVisitor visitor(tu.p_name); 
    traverse_test_tree(tu, visitor); 

    const test_results& tr = results_collector.results(tu.p_id); 
    if(tr.passed()) 
    { 
     ostr << "Test Passed\n"; 
    } 
    else 
    { 
     plain_report_formatter::do_confirmation_report(tu, ostr); 
    } 
} 
+0

優秀、ありがとう。訪問者を使って自分のテストランナーを実装する方法についても、正しい道のりに私を置くことができますか?または、私自身のmain()関数を追加してテストを出力するために別のバイナリを作成する必要がありますか? – Roel

+0

私はカスタムテストランナーや自分のメイン関数を使って遊んでいません。私はboost/test directoyrの中で掘り起こすことを提案しています(traverse_test_treeの発見方法です)。 – mark

+0

OKありがとう、ありがとう。 – Roel

2

Boost.Testのトランク版には、必要なものを得るためのコマンドライン引数があります。

+0

ああ、素晴らしい!ありがとう、偉大な図書館のおかげで! – Roel

+1

@Gennadiy Rozentalこの新しいパラメータlist_contentをReleaseに設定すると、 – KindDragon

+0

リリースに関する最新情報はありますか? – CinCout

関連する問題