Google Test (gtest) は C/C++ 用の単体テストフレームワークです。テストケースを TEST() マクロで定義し、EXPECT_EQ・ASSERT_EQ などのアサーションマクロで期待値を検証します。Google Mock (gmock) は gtest と組み合わせて使うモックライブラリで、依存関係を持つコードのテストを可能にします。
このリポジトリの test/ ディレクトリには Google Test を使用したテストコードが含まれています。testfw/ サブモジュールが Google Test のラッパーと実行支援スクリプトを提供しており、add・subtract・multiply・divide の各関数と calcHandler に対するテストが実装されています。標準 C ライブラリ関数のモックも test/libsrc/mock_calcbase/ と test/libsrc/mock_calc/ で提供されています。
C 言語のコードを Google Test でテストするには C++ でテストコードを書く必要があります。testfw/ の仕組みを理解することで、新たなテストケースを追加できるようになります。
テストコードの構成:
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