2013年7月30日火曜日

[gtest] テストの書き方 TIPS

Google Test でテストを書くときのちょっとしたテクニックを紹介します。
(※ こちらの記事では gtest 1.6.0 を使用しています。)

テストフィクスチャの再利用1
テストフィクスチャは typedef で別名を定義することで、再利用できます。
class TestHoge : public ::testing::Test {};

TEST_F(TestHoge, Test)
{
}

typedef TestHoge TestFoo;

TEST_F(TestFoo, Test)
{
}
複数のテストケースで同じセットアップ処理を実行する場合に便利です。

テストフィクスチャの再利用2
値のパラメータ化テスト用に定義したテストフィクスチャは、通常のテストのテストフィクスチャとして利用できます。
class TestHoge : public ::testing::TestWithParam {};

TEST_P(TestHoge, A)
{
}

TEST_F(TestHoge, B)
{
}

INSTANTIATE_TEST_CASE_P(A, TestHoge, ::testing::Range(0, 2));
TEST_P 用の TestWithParam を継承したテストフィクスチャは、TEST_F でも使用できます。
一部分だけパラメータテストをしたい場合に便利です。

複雑なパラメータの作成
パラメータに乱数を使用したり、複雑な計算結果を利用する場合、
パラメータを格納した ::std::vector を返す関数を作成することで、楽に書けます。
::std::vector MakeParam()
{
  ::std::vector v(10);
  ::std::mt19937 engine;
  ::std::uniform_int_distribution dist(0, 1000);
  ::std::generate(v.begin(), v.end(), [&](){ return dist(engine); });
  return v;
}

INSTANTIATE_TEST_CASE_P(A, TestHoge, ::testing::ValuesIn( MakeParam() ) );

まとめ
以上で、TIPS 終わりです…
書き出してから気づきましたが、
なんか、あんま大したこと書いてないですね…

0 件のコメント:

コメントを投稿