0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【C++】GoogleTestのアサーション備忘録

Last updated at Posted at 2025-03-25

1. GoogleTestとは

GoogleTestとはGoogleが提供しているC++用の単体試験フレームワークです。
アサーションセットが豊富で、簡単に導入できます。

2. 使い方

2.1 導入

Visual Studio Installerを起動します。
「C++によるデスクトップ開発」を選択し、インストールします。
スクリーンショット 2025-03-19 160841.png

上記ツールセットの中にGoogleTestも入っているので、これで準備完了です。
スクリーンショット 2025-03-19 161016.png

2.2 GoogleTestの追加

Visual Studioでテストしたいソリューションを起動します。
ソリューション上を右クリック、追加、新しいプロジェクトを選択。
スクリーンショット 2025-03-19 163155.png
GoogleTestを選択し、適当な名前を付けて作成します。
この時、テストしたいプロジェクトを選択しておきましょう。
スクリーンショット 2025-03-19 163433.png

3. アサーション一覧

ASSERT_*から始まる場合、失敗したら中断し、EXPECT_*から始まる場合は、失敗しても続行します。

4.1 True or False

Assert Expect 説明
ASSERT_TRUE(data) EXPECT_TRUE(data) dataがTrueであるか
ASSERT_FALSE(data) EXPECT_FALSE(data) dataがFalseであるか

4.2 2値の比較

Assert Expect 説明
ASSERT_EQ(val1, val2) EXPECT_EQ(val1, val2) val1 == val2
ASSERT_NE(val1, val2) EXPECT_NE(val1, val2) val1 != val2
ASSERT_LT(val1, val2) EXPECT_LT(val1, val2) val1 < val2
ASSERT_LE(val1, val2) EXPECT_LE(val1, val2) val1 <= val2
ASSERT_GT(val1, val2) EXPECT_GT(val1, val2) val1 > val2
ASSERT_GE(val1, val2) EXPECT_GE(val1, val2) val1 >= val2

EQとかNEとかの正式名称を載せておきます。

EQ: Equal
NE: Not Equal
LT: Less than
LE: Less than or Equal to
GT: Greater than
GE: Greater than or Equal to

4.3 文字列の比較

Assert Expect 説明
ASSERT_STREQ(str1, str2) EXPECT_STREQ(str1, str2) str1 = str2
ASSERT_STRNE(str1, str2) EXPECT_STRNE(val1, val2) str1 != str2
ASSERT_STRCASEEQ(str1, str2); EXPECT_STRCASEEQ(val1, val2) str1 == str2
(大文字小文字を無視)
ASSERT_STRCASENE(str1, str2); EXPECT_STRCASENE(val1, val2) str1 "= str2
(大文字小文字を無視)

これらのアサーションはwchar_t*型の文字列比較に使います。
C++でよく使うstring型はEXPECT_EQで比較します。

5. 使用例

今回は以下のような、入力値を2倍するだけの関数をテストしてみます。

int Twice(int val) {
	return val * 2;
}

テストコードを記述します。
TEST()マクロ内にテストコードを記述し、テストを実行します。
TEST(hoge, failed)は値が一致してないので失敗します。

TEST(hoge, success) {
	EXPECT_EQ(Twice(2), 4);
	EXPECT_EQ(Twice(INT_MAX), 4294967294);
}
TEST(hoge, failed) {
    EXPECT_EQ(Twice(2), 2);
}

テストエクスプローラーを表示し、実行します。
スクリーンショット 2025-03-25 170009.png

1つでもアサーションが失敗した場合、全体のテスト結果が失敗となるので、留意しておきましょう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?