Google Test(通称 gtest)は、Linux、macOS、Windows、Cygwin など複数のプラットフォームに対応したC++向けユニットテストフレームワークです。Googleが開発・公開しており、クロスプラットフォームでのテストコード作成を支援します。ここでは、Windows環境におけるライブラリのビルドとプロジェクトへの統合手順を解説します。
ソースコードの取得とビルド
GitHubから公式リリース版 v1.14.0 をダウンロードします:
https://github.com/google/googletest/releases/tag/v1.14.0
CMakeを利用してビルドします。CMakeはプラットフォーム間で共通のビルド設定(CMakeLists.txt)を記述することで、Visual StudioやMakefileなど対象環境に応じたビルドシステムを自動生成します。Windowsでは、CMakeにより.slnファイルが生成され、Visual Studioでそのまま開いてビルド可能です。
プロジェクトへの統合
ビルド後、生成されたlib/ディレクトリ内の静的ライブラリ(gtest.lib, gmock.lib)と、include/ディレクトリのヘッダーファイルをプロジェクトに追加します。例として以下のようなディレクトリ構成を想定します:
C:\cpp\gtest1.14.0\lib\— 静的ライブラリ格納C:\cpp\gtest1.14.0\include\— ヘッダー格納
以下のサンプルコードで動作確認を行います:
#include "gtest/gtest.h"
#include <iostream>
// テスト対象関数
int CalcGCD(int x, int y) {
if (x == 0 || y == 0) throw "invalid input";
int remainder = x % y;
return (remainder == 0) ? y : CalcGCD(y, remainder);
}
// テストケース定義
TEST(GCDTest, PositiveInputs) {
EXPECT_EQ(2, CalcGCD(4, 10));
EXPECT_EQ(6, CalcGCD(30, 18));
}
int main(int argc, char** argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
よくあるエラーと対処法
リンカーエラー LNK2038: RuntimeLibrary mismatch が発生する場合、プロジェクトとgtestライブラリのランタイムライブラリ設定が一致していないことが原因です。
Visual Studioのプロジェクト設定 → C/C++ → コード生成 → ランタイムライブラリ で以下を選択可能:
- /MDd — デバッグ用DLLランタイム
- /MD — リリース用DLLランタイム
- /MT — リリース用静的ランタイム
- /MTd — デバッグ用静的ランタイム
エラーメッセージに「MTd_StaticDebug」が必要とあれば、プロジェクト設定を/MTdに変更してください。