2013年7月30日火曜日

[gtest] テストの書き方 TIPS

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

テストフィクスチャの再利用1
テストフィクスチャは typedef で別名を定義することで、再利用できます。
1
2
3
4
5
6
7
8
9
10
11
class TestHoge : public ::testing::Test {};
 
TEST_F(TestHoge, Test)
{
}
 
typedef TestHoge TestFoo;
 
TEST_F(TestFoo, Test)
{
}
複数のテストケースで同じセットアップ処理を実行する場合に便利です。

テストフィクスチャの再利用2
値のパラメータ化テスト用に定義したテストフィクスチャは、通常のテストのテストフィクスチャとして利用できます。
1
2
3
4
5
6
7
8
9
10
11
12
class TestHoge : public ::testing::TestWithParam<int> {};
 
TEST_P(TestHoge, A)
{
}
 
TEST_F(TestHoge, B)
{
}
 
INSTANTIATE_TEST_CASE_P(A, TestHoge, ::testing::Range(0, 2));
</int>
TEST_P 用の TestWithParam を継承したテストフィクスチャは、TEST_F でも使用できます。
一部分だけパラメータテストをしたい場合に便利です。

複雑なパラメータの作成
パラメータに乱数を使用したり、複雑な計算結果を利用する場合、
パラメータを格納した ::std::vector を返す関数を作成することで、楽に書けます。
1
2
3
4
5
6
7
8
9
10
11
::std::vector<int> MakeParam()
{
  ::std::vector<int> v(10);
  ::std::mt19937 engine;
  ::std::uniform_int_distribution<int> dist(0, 1000);
  ::std::generate(v.begin(), v.end(), [&](){ return dist(engine); });
  return v;
}
 
INSTANTIATE_TEST_CASE_P(A, TestHoge, ::testing::ValuesIn( MakeParam() ) );
</int></int></int>

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

0 件のコメント:

コメントを投稿