業務効率化の道具箱(6)Google Testを使ってみよう【その2】:山浦恒央の“くみこみ”な話(159)(2/3 ページ)
ソフトウェア開発にとどまらない、PCを使う全ての人が対象となるシリーズ「業務効率化の道具箱」。第6回は、前回導入した「Google Test」の使い方と、「アサーション」「パス・カバレッジ」によるテストの方法を紹介する。
4.テストコードの記述方法
以上でテスト実施する準備は整いました。次は、テストコードの記述方法で「アサーション」と「パス・カバレッジ」によるテストを取り上げます。
4.1 アサーションとは
アサーションとは、「コードを実行した結果の変数の値」が「期待した値」と一致するか実行時に比較/確認する式のことです。例えば、10となるはずの変数が、本当に10なのかをプログラムで記述します。
Google Testでは、アサーションマクロを記述し、実行結果と期待値を確認できます。アサーションの方法には数種類ありますが、最もよく使うのが、「EXPECT_EQ」マクロです。
記述方法:EXPECT_EQ(期待値,実行結果); 記述例:EXPECT_EQ(4, sum(1,3));
EXPECT_EQは、期待値と実行結果が一致すること確認するアサーションマクロです。引数に期待値と実行結果を入れ、結果を確認します。記述例では、sum関数の2つの引数に1と3を入れて、出力結果が1+3=4となることを確認しています。
EXPECT_EQの良いところは、比較結果が異なっていてもプログラムが停止しないことです。そのため、テストケースを全件実行し、何件がパスしているか確認できます。実行結果と期待値が異なると、以降のプログラムを正しく実行できなかったり、無意味になる場合があります。そのような致命的な異常が発生し、プログラムを異常停止させたい場合ASSERT_EQを使います。
4.1.1 TESTマクロの記述
次は、TESTマクロの記述方法です。このマクロ内に複数のアサーションマクロを記述し、テストを実行します。
記述方法: TEST(テストケース名, 詳細なテストケース名){ //EXPECT_EQ(・・・); }
例: //Sum関数のテスト, 結果の確認 TEST(SumTest, CheckResult){ EXPECT_EQ(30, sum(14,16); EXPECT_EQ(20, sum(5,15); EXPECT_EQ(90, sum(30,60); }
例では、TESTマクロ内に任意のテストケース名を記述しています。また、複数のアサーションマクロ(EXPECT_EQ)を記述し、テストしていますね。TESTマクロを使用し、テストケースを一定のまとまりに分割しましょう。
4.1.2 出力結果の確認
出力結果はコンソールから確認できます。
(1)テスト成功(パスする)の場合
テストが成功する場合は、図1のメッセージが現れます。
テストが成功すると、図1の「PASSED」という緑のメッセージが現れ、期待値と実行結果が一致していることが分かります。
(2)テストが失敗する場合
バグやテストコードの記述ミスで、テスト失敗となる場合があります。例えば、本来ならば1+5=6となるはずが3と書いてしまった場合を考えましょう。
//1 + 5 = 6となるはずが、期待値を3と書いてしまった EXPECT_EQ(3, sum(1,5));
「sum関数に1と5を入れると、3が返ってくる」というテストコードを記述したとします。この場合、期待値と出力値は一致しないため、図2のようなメッセージが現れます。
図2は、テストが失敗したときのメッセージです。テストが失敗する場合は、赤い文字で「FAILED」と書いたメッセージを表示します。
Copyright © ITmedia, Inc. All Rights Reserved.