Macで google test をお試し利用する

# 目的
Macで google test をお試し利用した際の備忘録です。

[google test](https://github.com/google/googletest)

# 環境

```
$ sw_vers
ProductName:	Mac OS X
ProductVersion:	10.13.6
BuildVersion:	17G4015
```

# 準備

### cmakeのインストール

```
brew install cmake
```

### googletestをクローン

```
git clone https://github.com/google/googletest.git
```

### ビルド用ディレクトリを作成して移動

```
mkdir build
cd build
```

### cmakeを実行

```
ln -s /usr/local/bin/gcc-9 /usr/local/bin/gcc
ln -s /usr/local/bin/g++-9 /usr/local/bin/g++
cmake -DCMAKE_C_COMPILER=/usr/local/bin/gcc -DCMAKE_CXX_COMPILER=/usr/local/bin/g++ .. # Macの場合はgcc,g++パス指定が必要
```

### makeを実行

```
make
...
[100%] Built target gtest_main
```

### mock,gtest,libをパスへコピー

```
sudo cp -r ../googlemock/include/gmock /usr/local/include/.
sudo cp -r ../googletest/include/gtest /usr/local/include/.
sudo cp lib/*.a /usr/local/lib/
```

### テスト実行

```c++:test.cpp
#include <gtest/gtest.h>

TEST(TestCaseName, TestName){
  EXPECT_EQ(1, 1);
}
```

コンパイル

```
g++ test.cpp -pthread -lgtest_main -lgtest
```

実行ファイル（a.out)を実行

```
$ ./a.out 
Running main() from /Users/seigo/Desktop/python/gtest/googletest/googletest/src/gtest_main.cc
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from TestCaseName
[ RUN      ] TestCaseName.TestName
[       OK ] TestCaseName.TestName (0 ms)
[----------] 1 test from TestCaseName (0 ms total)

[----------] Global test environment tear-down
[==========] 1 test from 1 test suite ran. (1 ms total)
[  PASSED  ] 1 test.
```

テスト結果を出力する際は、実行時に --gtest_output を付与する。

```
$ ./a.out --gtest_output=xml:./result.xml
```

```xml:result.xml
<?xml version="1.0" encoding="UTF-8"?>
<testsuites tests="1" failures="0" disabled="0" errors="0" time="0.001" timestamp="2020-05-19T23:56:22" name="AllTests">
  <testsuite name="TestCaseName" tests="1" failures="0" disabled="0" errors="0" time="0" timestamp="2020-05-19T23:56:22">
    <testcase name="TestName" status="run" result="completed" time="0" timestamp="2020-05-19T23:56:22" classname="TestCaseName" />
  </testsuite>
</testsuites>
```

json形式も指定可能

```
$ ./a.out --gtest_output=json:./result.json
```

```son:result.json
{
  "tests": 1,
  "failures": 0,
  "disabled": 0,
  "errors": 0,
  "timestamp": "2020-05-19T23:58:37Z",
  "time": "0s",
  "name": "AllTests",
  "testsuites": [
    {
      "name": "TestCaseName",
      "tests": 1,
      "failures": 0,
      "disabled": 0,
      "errors": 0,
      "timestamp": "2020-05-19T23:58:37Z",
      "time": "0s",
      "testsuite": [
        {
          "name": "TestName",
          "status": "RUN",
          "result": "COMPLETED",
          "timestamp": "2020-05-19T23:58:37Z",
          "time": "0s",
          "classname": "TestCaseName"
        }
      ]
    }
  ]
}
```



# gtest-port.h:1814:40: error: 'override' keyword is a C++11 extension [-Werror,-Wc++11-extensions]

以下の記事を見つけて解決

> [(続) Google Testを導入してみた](https://qiita.com/y-vectorfield/items/f69464ee5d8cd80153bd)
> Google TestはC++11をベースに実装されている様です。故に、macOSデフォルトのgccやg++(試した環境ではVer4.2)ではビルドエラーが発生し、ビルドすることが出来ません。(∵ C++11で導入された新しい構文等に対応していないため)

gcc,g++のバージョンを更新する

```
$ brew install gcc
$ ln -s /usr/local/bin/gcc-9 /usr/local/bin/gcc
$ ln -s /usr/local/bin/g++-9 /usr/local/bin/g++
~/.bash_profileに以下を記載し、有効化します。
$ echo "export PATH=$PATH:/usr/local/bin" >> ~/.bash_profile
$ . ~/.bash_profile
```

MacOSの場合は、cmake時にgcc/g++パスを指定する必要がある

```
cmake -DCMAKE_C_COMPILER=/usr/local/bin/gcc -DCMAKE_CXX_COMPILER=/usr/local/bin/g++ ..
```

cmake実行後、makeするとエラーが解決できていた。

# 参考
[googletest](https://github.com/google/googletest)
[Google Testを導入してみた](https://qiita.com/y-vectorfield/items/6238cfd2d9c34aefe364)
[Google Testの使い方](https://qiita.com/shohirose/items/30e39949d8bf990b0462)
[(続) Google Testを導入してみた](https://qiita.com/y-vectorfield/items/f69464ee5d8cd80153bd)
[Jenkinsでgoogle testの結果表示](http://devstu.hatenablog.com/entry/2015/01/03/003812)
[Using gtest in jenkins](https://stackoverrun.com/ja/q/3077958)