(覚え書き)VisualStudio2019で、googletest,googlemockを、使用する(環境構築編)

# 作成環境イメージ

#### ディレクトリ構成
```plantuml
 @startsalt
 {{T
 + ソリューションメイン
 ++ ユニットテスト・モック定義プロジェクト)
 ++ 製品ソースプロジェクトA
 ++ 製品ソースプロジェクトB
 ++ 製品ソースプロジェクトC
 ++ ビルド成果物(exe,pdb)
 ++ 中間オブジェクト置き場(*.obj)
 ++ NuGetパッケージ置き場
 }}
 @endsalt
 ```

# 手順

#### １．被試験対象のプロジェクトをソリューションへ作成する。

・「 空のプロジェクト 」→　「　次へ(N)　」押下
![1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90255/a99e93b1-fca9-6a03-91c2-a1e0328badf2.png)

・ソリューションとプロジェクトを同じディレクトリに配置する(D) のチェックは外す。
　これを外すことで、複数プロジェクトを配置するときにわかりやすくなります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90255/26fb338e-ebf2-beb1-c22a-204fcf8e03c3.png)
＊ここでは、以下とする。
　プロジェクト名　：ProductA
　ソリューション名：TestCaseMain

・作成直後はこのようになる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90255/883c999d-6251-e2f2-7502-59475b0fd127.png)

#### ２．ユニットテスト(GoogleTest)用のプロジェクトを作成(追加)する。

・ソリューションエクスプローラー／ソリューション　で　右クリック／追加(D)／新しいプロジェクト(N)...を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90255/578da624-cb85-8f60-4e22-dcbf0d535546.png)

・「 Google Test 」→　「　次へ(N)　」押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90255/b6fff659-938e-618f-e221-f8d603b82d7c.png)
＊ここで表示が行われない方は、VisualStudioInstallerにて、コンポーネントの追加状況を確認してみてください。

・プロジェクト名(J)に、「TestCaseMain」と入力し、「　作成(C)　」を押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90255/c826d024-d6f1-327e-6642-f6e8d7aa9628.png)

・テストプロジェクトを指定する画面が表示されるので、先ほど作成した「ProductA」を選択し、「OK」を押下する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90255/f7ea9cfe-5340-2070-e509-20f90f85f091.png)

・作成直後はこのようの画面になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90255/6fc92e8f-25c4-0d29-62fe-2bff5f2c6777.png)

・個人的にプリコンパイルヘッダーを使用しないため、以下のような設定へ変更し、ヘッダとソースを削除。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90255/744d0e39-fb45-c0ec-fd32-dd0eb7136467.png)

#### ３．GoogleMockを追加する。

・ツール(T)／NuGetパッケージマネージャー(N)／ソリューションのNuGetパッケージの管理(N)...　を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90255/3aba6978-7faa-f1bb-66d8-e42660d289c8.png)

・参照タブの検索テキストボックスへ、「googlemock」と入力し、以下を、ProductAとTestCaseMainプロジェクトへインストール。
```
googlemock.v140.windesktop.static.rt-dyn
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90255/240b82ea-ab89-d794-ca50-c2823e0917c1.png)

・GoogleMock インストール状況
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90255/7778b7a2-7dd1-2963-11e2-e557d533c2ff.png)
・GoogleTest インストール状況
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90255/0bb90b39-e7f1-c2a2-0cc8-e756f17f44d5.png)


#### ３．中間オブジェクトの出力先を変更する。

・ProductA　側
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90255/91353ae2-b5bf-79c2-5971-2472504805c2.png)

・TestCaseMain　側
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90255/124d43b2-2593-d5aa-cfdc-94db6ba51ee5.png)
＊被試験側でのオブジェクトをリンクしたいので、中間オブジェクトの出力先を、以下へ統一。

```
$(SolutionDir)$(Configuration)\
```

#### ４．追加の依存ファイル２つを設定する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90255/ec4d2247-d0e1-e438-52b2-5a14fd1d3d0a.png)

 ```
$(SolutionDir)packages\googlemock.v140.windesktop.static.rt-dyn.1.7.0.1\build\native\lib\$(Platform)\v140\$(Configuration)\gmock.lib
$(SolutionDir)Objects\$(Configuration)\*.obj
 ```

#### ５．追加の依存ファイル（googlemockのライブラリ）を設定する。

#### ６．被試験対象側のインクルードファイル(.h)追加のインクルードディレクトリを設定する