Google Test / Google Mock

1 概要

Google Test (gtest) は C/C++ 用の単体テストフレームワークです。テストケースを TEST() マクロで定義し、EXPECT_EQASSERT_EQ などのアサーションマクロで期待値を検証します。Google Mock (gmock) は gtest と組み合わせて使うモックライブラリで、依存関係を持つコードのテストを可能にします。

このリポジトリの test/ ディレクトリには Google Test を使用したテストコードが含まれています。testfw/ サブモジュールが Google Test のラッパーと実行支援スクリプトを提供しており、addsubtractmultiplydivide の各関数と calcHandler に対するテストが実装されています。標準 C ライブラリ関数のモックも test/libsrc/mock_calcbase/test/libsrc/mock_calc/ で提供されています。

C 言語のコードを Google Test でテストするには C++ でテストコードを書く必要があります。testfw/ の仕組みを理解することで、新たなテストケースを追加できるようになります。

2 習得目標

3 学習マテリアル

3.1 公式ドキュメント

3.2 チュートリアル・入門

  • testfw README - このリポジトリで使用するテストフレームワークの説明

4 このリポジトリとの関連

4.1 使用箇所 (具体的なファイル・コマンド)

テストコードの構成:

test/
+-- src/calc/
|   +-- main/
|   |   +-- addTest/          # add コマンドのテスト
|   |   +-- calcTest/         # calc コマンドのテスト
|   |   +-- shared-and-static-calcTest/
|   +-- libcalcbaseTest/
|       +-- addTest/           # add 関数のテスト
|       +-- subtractTest/      # subtract 関数のテスト
|       +-- multiplyTest/      # multiply 関数のテスト
|       +-- divideTest/        # divide 関数のテスト
+-- libsrc/
    +-- mock_calcbase/         # calcbase モック実装
    +-- mock_calc/             # calc モック実装

テストコードの基本パターン (C 関数のテスト例):

#include <testfw.h>

#include "libcalcbase.h"
#include "libcalc_const.h"

TEST(AddTest, PositiveNumbers) {
    int result = 0;
    EXPECT_EQ(CALC_SUCCESS, add(1, 2, &result));
    EXPECT_EQ(3, result);
}

TEST(AddTest, NegativeNumbers) {
    int result = 0;
    EXPECT_EQ(CALC_SUCCESS, add(-1, -2, &result));
    EXPECT_EQ(-3, result);
}

テストの実行:

make test

4.2 関連ドキュメント