eclipseのCDTプロジェクトでgoogleテストを使いたかったのですが、方法がわからなかったのでまとめます。
方法としては、本流のプロジェクトと、テストのプロジェクトを分ける方法をとります。
## 環境
* Ubuntu 16.04
* Google Test 1.8.1
## Google Testの導入
まずはGoogle Testを導入します。
[Google Test](https://github.com/abseil/googletest)のページから1.8.xのソースコードをダウンロードしてcmakeします。
```
$ wget https://github.com/abseil/googletest/archive/release-1.8.1.zip
$ unzip release-1.8.1.zip
$ cd googletest-release-1.8.1
$ mkdir build
$ cd build/
$ cmake ..
$ make
$ sudo make install
```
インストールはとっても簡単です。
/usr/local/lib にインストールされます。
## eclipseプロジェクトの設定
こんな感じでソースのプロジェクトとテストのプロジェクトを分けます。

テストのプロジェクトは普通に作成します。
ソースのプロジェクトのソース一式をテストプロジェクトにインポートします。
その際に、Linkd Folderでインポートします。
(下図を参照)

リンクしたプロジェクトには、mainを含むソースがあるので、ビルド対象から外します。
(下図を参照)

Google Testを使うために、ビルド設定を少し変更します。
GCC C++ Linkerに以下を追加します。
* gtest
* gtest_main
* pthread
(下図参照)



ここで一回ビルドします。
ビルドしたら、デバッグボタンなどで実行できるようにRun/Debug設定します。
(下図参照)



さらに... デバッグボタンを押した時にmain関数が無いのでエラーになります。
(デバッグ時にmain関数の一番上で止まるようになっているため)
上記の設定を無効にします。


これで、デバッグもできるようになりました。
実行すると以下のようになります。

ちなみにテストコードは以下の感じです。
```cpp
#include <gtest/gtest.h>
#include "../../HelloWorld/src/foo.h"
namespace {
class FooTest : public ::testing::Test{};
TEST_F(FooTest, CountUp)
{
Foo foo;
int value = foo.CountUp(2);
EXPECT_EQ(value, 3);
}
} // namespace
```
テストコードの書き方は、他に詳しいページがありますので、そちらを参考にしてください。
そのほか...
## Linuxでeclipseが動作しなかった...
どうやらjavaが入っていなかった様子。
```bash
$ sudo apt install openjdk-8-jre-headless
```
これで動いた
## 参考URL
* [GoogleTestでC++のコードをテストする](https://qiita.com/tjun/items/8047bf50930e6de36bdc)
## まとめ
C++を使うのにeclipseを使わない強者には関係ないかもしれませんがeclipseを使う場合はこんな感じでテストを行えるようになりました。
テストする事ができる事で、コードの信頼性がグッと上がるのとすぐに動作チェックできるので実装しやすくなりました。
0 件のコメント :
コメントを投稿