5

まったく同じ API と機能を共有する 2 つのクラスがあります (同じ機能を提供するために、異なるサードパーティ API をラップしています)。2 つのクラスには、共通の基本クラス/インターフェイスがありません。

そのうちの1つにブーストユニットテストがあり、もう1つでもまったく同じテストを実行したいのですが、今のところ、テストをコピーして貼り付け、クラス名を検索/置換する方法しか知りません。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>();
}

しかし、これがうまくいくかどうかさえわかりません。

4

2 に答える 2

9

まったく問題ありません。ただし、ブーストにはテンプレートテストケースがあります

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)

test は 2 回呼び出されます。1 回目は X 用、2 回目は Y 用です。

于 2013-10-16T12:15:40.857 に答える
5

異なるデータ型を使用して同じ一連のテストを実行する方法を提供するため、テスト ケース テンプレートを確認する必要があります。私が理解していることから、自動登録マクロを使用して、テスト ケース テンプレートを提供できます。

BOOST_AUTO_TEST_CASE_TEMPLATE(my_test, T, test_types)
{
    BOOST_CHECK(checkSomethingWithType(T));
}

tests_types型の MPL リストです。

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

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

于 2013-10-16T12:16:31.933 に答える