2011-06-21 8 views
3

私はいくつかの異なるモードで実行できる一連のテストを行っています。グローバルコンフィグレーションやフィクスチャコンフィグ以外にも、テストケースコードは同じです。ブーストテストライブラリ異なる "パラメータ"を持つスイートを2回実行

ブーストテストライブラリには、個々のテストケースの周りにラッパーを記述することなくこれを実現する方法がありますか?

これはコマンドラインスイッチではなく、同じ実行の一部である必要があります。

答えて

3

unary function test caseはおそらくあなたが望むものです。唯一の欠点は、自動登録(何らかの種類の工場機能に基づく)がサポートされていないように見えることです。

彼らはまたtest case templateを持っていますが、それは自動的に登録されているので、あまりないものがあればそれぞれの設定のタイプを定義することで乱用することができます。

編集:パラメータは、テストスイート内のすべてに影響するため、これらは非常に、私が欲しいものを達成していない

// Parameter is the type of parameter you need. Might be anything from simple int (in 
// which case the template parameter may be a value, not reference) to complex object. 
// It just has to be possible to create (static) global instances of it. 

template <const Parameter &param> 
struct Fixture { 
    // do whatever you want, param is normal object reference here 
    // it's not a member, but you can: 
    const Parameter &getParameter() { return param; } 
} 

static Parameter p1(whatever); 
static Parameter p2(something_else); 
// ... 

typedef boost::mpl::list<Fixture<p1>, Fixture<p2> > Fixtures; 

BOOST_AUTO_TEST_CASE_TEMPLATE(test, F, Fixtures) 
{ 
    F fixture; // Unfortunately you can't make it true fixture, so you have to have instance 
    // Test what you want 
} 
+0

:テストケーステンプレートは、このようなものを使用することができます。私はまだラッパーを書く必要があります。テンプレートテストのドキュメントは非常に少ないですが、動作するかどうかは言えません。 –

+0

まあ、テンプレートは自動登録ができるので、書くべきコードは少なくなりますが、テストケースではテンプレートパラメータを明示的に使用する必要があります(ローカルインスタンスを作成することでフィクスチャを手動で使用するのと同様です)。 –

+0

これは実際には機能するかもしれません。テストケース内のパラメータを使用することは問題ではありません。テスト階層は理想的ではありません(2つのスイートを実行したいのですが、それぞれのテストを重複しないようにしています)。 –

関連する問題