4

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

4

2 に答える 2

4

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

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

以下は、特定の形式でテスト結果を出力するために私が書いたいくつかのサンプルコードです。traverse_test_tree を使用して各テストの結果を出力します。うまくいけば、有利なスタートを切ることができます....

/**
 * 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 );
    }
}
于 2011-12-19T11:57:16.667 に答える
2

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

于 2012-05-24T23:02:26.513 に答える