2013-10-16 14 views
5

全く同じAPIと機能を共有する2つのクラスがあります(同じ機能を提供するために異なるサードパーティAPIをラッピングしています)。 2つのクラスはではありません。には共通のベースクラス/インターフェイスがあります。異なるクラスタイプのBoostユニットテストを繰り返してください

私はそれらのいずれかのブーストユニットテストをしていますが、他のテストで同じ正確なテストをしたいのですが、今はテストをコピーして貼り付け、クラス名を見つける/置き換えるしかありません。 2つの場所でテストを更新することを迷惑にするだけでなく、2つのクラスが同じようにテストされているという保証もありません。

テストケースを「テンプレート化」する方法はありますか?そうでない場合、どうすればこの問題を解決できますか?私がこれまで考えることのできるものは、疑似コードのようなものです:

template<class T> 
void runTests() 
{ 
T t; 
//do tests here 
} 

BOOST_AUTO_TEST_CASE(test_X) 
{ 
runTests<X>(); 
} 
BOOST_AUTO_TEST_CASE(test_Y) 
{ 
runTests<Y>(); 
} 

しかし、これが機能するかどうかわかりません。

答えて

8

これは完全に問題ありません。最初Y.

のためのXと第二のために、しかし、

http://www.boost.org/doc/libs/1_54_0/libs/test/doc/html/utf/user-guide/test-organization/auto-test-case-template.html

だから、このようなものが

typedef boost::mpl::vector<X, Y> XY_types; 
BOOST_AUTO_TEST_CASE_TEMPLATE(test_X_or_Y, T, XY_types) 

を助けることができるブーストでテンプレートのテストケースがあり、テストは二回呼び出されます
4

Test case templateは、さまざまなデータタイプを使用して同じテストセットを実行する手段を提供するためです。私が理解から、自動登録のマクロを使用して、あなたはテストケースのテンプレートを提供することができます:

tests_typesは種類のMPLリストである
BOOST_AUTO_TEST_CASE_TEMPLATE(my_test, T, test_types) 
{ 
    BOOST_CHECK(checkSomethingWithType(T)); 
} 

typedef boost::mpl::list<X, Y> test_types; 

これらの例は以下から抽出され、適合されていますBoostテストのドキュメント

関連する問題