業務効率化の道具箱(6)Google Testを使ってみよう【その2】山浦恒央の“くみこみ”な話(159)(2/3 ページ)

» 2022年11月28日 07時00分 公開
※本記事はアフィリエイトプログラムによる収益を得ています

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 図1 テスト成功時のメッセージ(一部抜粋)

 テストが成功すると、図1の「PASSED」という緑のメッセージが現れ、期待値と実行結果が一致していることが分かります。

(2)テストが失敗する場合

 バグやテストコードの記述ミスで、テスト失敗となる場合があります。例えば、本来ならば1+5=6となるはずが3と書いてしまった場合を考えましょう。

//1 + 5 = 6となるはずが、期待値を3と書いてしまった
EXPECT_EQ(3, sum(1,5));

 「sum関数に1と5を入れると、3が返ってくる」というテストコードを記述したとします。この場合、期待値と出力値は一致しないため、図2のようなメッセージが現れます。

図2 図2 テスト失敗時のメッセージ(一部抜粋)

 図2は、テストが失敗したときのメッセージです。テストが失敗する場合は、赤い文字で「FAILED」と書いたメッセージを表示します。

Copyright © ITmedia, Inc. All Rights Reserved.