2012-04-11 3 views
4

私は並列(mpiベース)のC++コードのためにboost :: unit_testを使っていくつかのテストを作成したいと思います。私は、テストフレームワークの使用に関するいくつかの基本的な経験があります。私にとって、並列コードに行くときの主な問題は、最初に呼び出されるようなMPI :: Initを置く場所です。私が作成したテストスイートには、主な機能はありません。さらに、いくつかのアサーションが既存のランクのサブセットで失敗した場合、Boost :: Testは(mpiに関して)正しく存在しますか?並列コードのためのBoost :: Testの使用

答えて

2

ブーストテストにはfixture supportがあり、テストケースごと、テストスイートごと、またはグローバルにセットアップ/クリーンアップを実行できます。あなたはMPI::Initに電話をかけなければならないように思えます。

struct MPIFixture { 
    MPIFixture() { MPI::Init(); } 
    ~MPIFixture() { /* I bet there's a deinit you should call */ } 
}; 

BOOST_GLOBAL_FIXTURE(MPIFixture); 

あなたは、独自のmain機能を提供するフレームワークで作業している場合のトラブルは、それに取り組んで、または持っている場合は、することができます#define BOOST_TEST_NO_MAINブーストヘッダを含む前。その後、boost::unit_test::unit_test_mainを呼び出してテストスイートを実行することができます。

+0

MPI :: Initがコマンドライン引数を必要とするため、Fixturesは機能しません。あなたの2番目の提案は問題を解決します!私にとっては、この文脈ではpost http://stackoverflow.com/q/963158/1326595も役に立ちました。 –

+1

実際には、framework :: master_test_suite()インターフェイスを通してグローバルフィクスチャのコマンドライン引数にアクセスすることができます。 –

関連する問題