前回の記事でもVisual StudioとGoogleTestを統合して、C++の単体テストを実行しました。
今回はVisual Studioとvcpkgパッケージマネージャを使ったプロジェクト向けにgtestとgmockをvcpkg経由でインストール、プロジェクトの構築をやっていきます。
既にvcpkgは入っている前提のため、必要な場合は以下の記事を参照してください。
テストの準備
gtestとgmockのインストール
vcpkgでgtestの存在を確認
vcpkg search gtest
gtest 1.14.0が見つかりました。これをインストールします。
vcpkgの初期化
プロジェクトでvcpkgを初期化していなければ以下を実行してvcpkg.jsonを作成しておきます。
vcpkg new --application
インストール
下記のコマンドでgtestをインストールします。
vcpkg add port gtest
vcpkg install
vcpkg_installedフォルダができるので、「vcpkg_installed>x64-windows>lib」フォルダを確認して、gtest.libがあるのを確認します。
gmockはgtest側にプロジェクトが統合されたため、この手順で両方のライブラリがインストールできるようになりました。
テストプロジェクトの作成
次にテストプロジェクトをする手順です。
プロジェクトテンプレートの選択
vcpkgでgtestを入れる場合、プロジェクトテンプレートは「空のプロジェクト」を使います。
テストの作成
cppファイルを作成
test.cppというファイルを追加してテストコードを書いてみますが、もちろんエラーになります。
プロジェクトの設定を見直す
vcpkgマニフェストモードに変更
「構成プロパティ>vcpkg>Use Ccpkg Manifest」を「はい」に変更します。
リンカーを設定
「構成プロパティ>リンカー>入力>追加の依存ファイル」を開きます。
以下の4つのパスを追加します。
$(SolutionDir)vcpkg_installed\x64-windows\lib\gtest.lib;
$(SolutionDir)vcpkg_installed\x64-windows\lib\manual-link\gtest_main.lib;
$(SolutionDir)vcpkg_installed\x64-windows\lib\gmock.lib;
$(SolutionDir)vcpkg_installed\x64-windows\lib\manual-link\gmock_main.lib;
テストの動作確認
ビルドして確認
これでエラーが消えることが確認できます。
テストを実行
テストエクスプローラーを起動して、実行してみるとテストが通ることが確認できます。
gmockを使ってMockの機能を試す
Mockを使ったコードの準備
以下のようなテストコードを試してみます。 前回記事と同様のコードです。
#include <gtest/gtest.h>
#include <gmock/gmock.h>
using ::testing::Return;
namespace GoogleTestWithVcpkg
{
// モック化するための抽象クラス
class IMyClass
{
virtual int sub(int a, int b) = 0;
};
// モックの定義
class MyClassMock : public IMyClass {
public:
MOCK_METHOD(int, sub, (int a, int b));
};
TEST(Method, TestCase) {
MyClassMock myClass;
// モックの挙動を決定
EXPECT_CALL(myClass, sub, (1, 1))
.WillOnce(Return(0));
auto result = myClass.sub(1, 1);
EXPECT_EQ(result, 0);
}
}
こちらのコードですが、ビルドしてみると以下のようなエラーを出力します。
「2件の未解決の外部参照」
外部参照エラーを修正
「構成プロパティ>C/C++>プリプロセッサ>プリプロセッサの定義」に「GTEST_LINKED_AS_SHARED_LIBRARY」を追加します。
Mockの動作確認
テストの実行
無事にエラーが消えて、テストが成功したことが確認できます。
おわり!