Google Testで「値をパラメータ化したテスト」を試してみるの続きを書いてみる [Google Test]
前回,Google Testで「値をパラメータ化したテスト」を試してみたが,その説明が途中で終わっていた.
ずいぶん間があいてしまったが,続きを書いてみる.
で,前回の続きだが,テストするときにパラメータとして入力値と期待値のペアを複数用意しておいて,それを使ってテストを実行したい場合がよくあると思う.
今回の例で言えば,奇数ならfalseで偶数ならtrueになるわけだが,テストのパラメータとして,入力値としていくつかの奇数と偶数と,その期待値であるbool値を具体的な値として用意しておく.
例えば,
で,そんな場合には,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通りに展開してくれる.これが無ければ自分でループ文を書くとかをしなければならないので,とても楽ちん.
では,お試しあれ.
ずいぶん間があいてしまったが,続きを書いてみる.
で,前回の続きだが,テストするときにパラメータとして入力値と期待値のペアを複数用意しておいて,それを使ってテストを実行したい場合がよくあると思う.
今回の例で言えば,奇数なら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通りに展開してくれる.これが無ければ自分でループ文を書くとかをしなければならないので,とても楽ちん.
では,お試しあれ.