gMockについて勉強してみた(1):Windows上でgMockをビルドしてみた

2025年8月14日

どもです。今回は、Googleが提供するC++用モックライブラリ「gmock」を、Windows環境でビルドする手順をまとめました。

最近、googletestを使った単体テストを書いている中で、「gMockも使えるようにならないとダメだ!」と強く感じるようになりました。
そこで、今さらではありますが、gMockの使い方を勉強してみることにしました。

今回から、gMockの使い方について何回かに分けて記事を書いていきます。


0. 作業環境

今回の投稿は、以下の環境で作業を行っています。

項目 内容
CPU Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz 3.20 GHz
RAM 16.0 GB (15.9 GB 使用可能)
OS Windows 10 Professional 22H2 (19045.5487)
Visual Studio Visual Studio Community 2022 (64bit), Version 17.14.8
CMake version 4.1.0

1. gMockをビルドする

まず、gMockをビルドします。gMockのソースコードは、googletestと同じGitHubリポジトリに含まれています。

今回はコマンドプロンプト(PowerShellではない)上で、以下のコマンドを実行しました。

cd (任意のディレクトリ)
git clone https://github.com/google/googletest.git
cd googletest
mkdir build
cd build
cmake ..
cmake --build . --config Release
cmake --build . --config Debug

※最後の Debug ビルドは必須ではありません。

ビルドが完了すると、build ディレクトリ配下に lib フォルダが作成され、
Release または Debug ディレクトリ内に以下のファイルが生成されます。

  • gmock.lib
  • gmock_main.lib

2. gMockを使ってみる

ここからは、ビルドしたgMockをVisual Studioで使用する手順と簡単なサンプルコードを紹介します。

2.1 プロジェクトの作成

  • 種類:コンソールアプリケーション
  • 言語:C++

ソリューション名・プロジェクト名は任意で構いません。

2.2 プロジェクト設定

Visual Studioのプロパティから以下の設定を行います。

設定項目 設定値
[C/C++] – [全般] – [追加のインクルードディレクトリ] gmockのincludeディレクトリのパス(ビルドでクローンしたディレクトリ内の googlemock/include
[リンカー] – [全般] – [追加のライブラリディレクトリ] ビルドしたgmockライブラリが格納されたディレクトリのパス
[リンカー] – [入力] – [追加の依存ファイル] gmock.libgmock_main.lib

なお、今回はgmockの使い方を示す例でgoogletestも使用します。
そのため、これらの設定に加えて、googletestの使用設定も併せて行います(詳細は過去の投稿参照)。

2.3 サンプルコード

インターフェースとモッククラス

#include <gtest/gtest.h>
#include <gmock/gmock.h>

// 表示用インターフェース
class IDisplay {
public:
    virtual ~IDisplay() = default;
    virtual void ShowResult(int value) = 0;
};

// モッククラス
class MockDisplay : public IDisplay {
public:
    MOCK_METHOD(void, ShowResult, (int value), (override));
};

テスト対象クラス

class Calculator {
public:
    Calculator(IDisplay& display) : display_(display) {}

    void AddAndShow(int a, int b) {
        int result = a + b;
        display_.ShowResult(result);
    }

private:
    IDisplay& display_;
};

テストケース

TEST(CalculatorTest, CallsShowResultWithSum) {
    MockDisplay mock;

    // 期待設定: ShowResult(3) が1回だけ呼ばれる
    EXPECT_CALL(mock, ShowResult(3))
        .Times(1);

    Calculator calc(mock);
    calc.AddAndShow(1, 2);
}

このテストでは、AddAndShow(1, 2) を呼び出すと
ShowResult(3) が1回だけ呼ばれることを検証しています。

3. 提案した内容と比較

以前の記事(コレとかコレ)で、どのようなスタブを実装するとよいかについて説明しています。
その内容から、今回のメソッド(ShowResult)のスタブ実装は以下の条件を満たしていれば十分と言えます。

  • 呼び出し回数を確認できる
  • 引数として渡された値を確認できる

今回のサンプルコードを見ると、gMockを用いることでこれらの条件を満たしていることが確認できます。


結論

今回は、Windows環境でgMockをビルドし、Visual Studioから利用するまでの手順と基本的なサンプルコードを紹介しました。
gMockを使うことで、インターフェース経由の呼び出しや引数の検証が容易となり、単体テストの表現力が大幅に向上します。

次回は、より複雑なメソッドのモック化や呼び出し順序の検証など、さらに実践的な使い方を紹介する予定です。