gMockについて勉強してみた(1):Windows上でgMockをビルドしてみた
どもです。今回は、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.libgmock_main.lib
2. gMockを使ってみる
ここからは、ビルドしたgMockをVisual Studioで使用する手順と簡単なサンプルコードを紹介します。
2.1 プロジェクトの作成
- 種類:コンソールアプリケーション
- 言語:C++
ソリューション名・プロジェクト名は任意で構いません。
2.2 プロジェクト設定
Visual Studioのプロパティから以下の設定を行います。
| 設定項目 | 設定値 |
|---|---|
| [C/C++] – [全般] – [追加のインクルードディレクトリ] | gmockのincludeディレクトリのパス(ビルドでクローンしたディレクトリ内の googlemock/include) |
| [リンカー] – [全般] – [追加のライブラリディレクトリ] | ビルドしたgmockライブラリが格納されたディレクトリのパス |
| [リンカー] – [入力] – [追加の依存ファイル] | gmock.lib、gmock_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を使うことで、インターフェース経由の呼び出しや引数の検証が容易となり、単体テストの表現力が大幅に向上します。
次回は、より複雑なメソッドのモック化や呼び出し順序の検証など、さらに実践的な使い方を紹介する予定です。




ディスカッション
コメント一覧
まだ、コメントがありません