SSブログ

Google Testで「値をパラメータ化したテスト」を試してみるの続きを書いてみる [Google Test]

前回,Google Testで「値をパラメータ化したテスト」を試してみたが,その説明が途中で終わっていた.
ずいぶん間があいてしまったが,続きを書いてみる.

で,前回の続きだが,テストするときにパラメータとして入力値と期待値のペアを複数用意しておいて,それを使ってテストを実行したい場合がよくあると思う.
今回の例で言えば,奇数ならfalseで偶数ならtrueになるわけだが,テストのパラメータとして,入力値としていくつかの奇数と偶数と,その期待値であるbool値を具体的な値として用意しておく.
例えば,
---------------
input  expect
---------------
  0     true
  1     false
  2     true
  3     false
  4     true
---------------
といった具合だ.

で,そんな場合には,tupleが使える環境ならtupleで,もし使えないなら適当な構造体を定義してやって,テストパラメータとして与えてやればいい.
今回のケースなら,intとboolの要素を持つようにしておいて,それぞれ入力値と期待値として使う.
::testing::Values()を使って,tupleを列挙してもいいし,あらかじめ配列にしておいて::testing::ValuesIn()でもいい.TEST_P内での使い方は,コードを見てみれば分かると思う.

これだと,テストパラメータとして入力値と期待値をコード中に列挙してやれるので,テスト対象のコードの挙動が分かりやすくなると思う.

最後に,::testing::Combine()について書いておく.
テストするときに,多くのパラメータの組み合わせに対してテストをしておきたい場合がある.
たとえば今回の例で,mul()に対して,少なくとも九九の計算が正しいことをテストしておきたいとする.そうすると,2つの入力値をそれぞれ1〜9まで変化させてテストする必要があり,組み合わせとしては81通りが必要になる.
こんな場合に,::testing::Combine()が使える.これの引数にテストしたい2つの入力値(今回の場合なら1〜9を2つ)を書いておくと,::testing::Combine()が全組み合わせ,すなわち81通りに展開してくれる.これが無ければ自分でループ文を書くとかをしなければならないので,とても楽ちん.

では,お試しあれ.
タグ:tuple combine
nice!(0)  トラックバック(0) 
共通テーマ:日記・雑感

nice! 0

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。